linux-kernel mailing list

FromSubjectsort iconDate
Al Viro
[PATCH] ptrdiff_t is not uintptr_t, damnit
Use of ptrdiff_t in - if (!access_ok(VERIFY_WRITE, u_tmp->rx_buf, u_tmp->len)) + if (!access_ok(VERIFY_WRITE, (u8 __user *) + (ptrdiff_t) u_tmp->rx_buf, + u_tmp->len)) is wrong; for one thing, it's a bad C (it's what uintptr_t is for; in general we are not even promised that ptrdiff_t is large enough to hold a pointer, just enough to hold a difference...
Aug 19, 6:55 pm 2007
Eric Preston
Re: Marvell 88E8056 gigabit ethernet controller
> The working board has a different version of the Marvell chip: > $ grep Marvell working-MB > 04:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 14) > $ grep Marvell broken-MB > 04:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 12) Just to add a bit more information, I've just build up a GA-965P-DS3 with a Q6600 and the onboard Marvell doesn't seem to be wor...
Aug 19, 6:45 pm 2007
Joe Perches
Re: [PATCH 4/5] Documentation/firmware/... convert #include ...
I see, sorry. I didn't read the file. I thought it was a sample driver with a binary blob. cheers, Joe Signed-off-by: Joe Perches <joe@perches.com> diff --git a/Documentation/firmware_class/firmware_sample_driver.c b/Documentation/firmware_class/firmware_sample_driver.c index 6865cbe..754ded2 100644 --- a/Documentation/firmware_class/firmware_sample_driver.c +++ b/Documentation/firmware_class/firmware_sample_driver.c @@ -13,7 +13,7 @@ #include <linux/device.h> #include <...
Aug 19, 6:41 pm 2007
Joe Perches
[PATCH 5/5] mm/... convert #include "linux/..." to #include ...
(untested) There are several files that #include "linux/file" not #include <linux/file> #include "asm/file" not #include <asm/file> Here's a little script that converts them: egrep -i -r -l --include=*.[ch] \ "^[[:space:]]*\#[[:space:]]*include[[:space:]]*\"(linux|asm)/(.*)\"" * \ | xargs sed -i -e 's/^[[:space:]]*#[[:space:]]*include[[:space:]]*"\(linux\|asm\)\/\(.*\)"/#include <\1\/\2>/g' Signed-off-by: Joe Perches <joe@perches.com> diff --git a/mm/slab.c b/mm/s...
Aug 19, 6:19 pm 2007
Joe Perches
[PATCH 4/5] Documentation/firmware/... convert #include "lin...
(untested) There are several files that #include "linux/file" not #include <linux/file> #include "asm/file" not #include <asm/file> Here's a little script that converts them: egrep -i -r -l --include=*.[ch] \ "^[[:space:]]*\#[[:space:]]*include[[:space:]]*\"(linux|asm)/(.*)\"" * \ | xargs sed -i -e 's/^[[:space:]]*#[[:space:]]*include[[:space:]]*"\(linux\|asm\)\/\(.*\)"/#include <\1\/\2>/g' This one is probably wrong. It should likely keep firmware.h in the same direct...
Aug 19, 6:19 pm 2007
Randy Dunlap
Re: [PATCH 4/5] Documentation/firmware/... convert #include ...
--- ~Randy *** Remember to use Documentation/SubmitChecklist when testing your code *** -
Aug 19, 6:34 pm 2007
Joe Perches
Re: [PATCH 4/5] Documentation/firmware/... convert #include ...
OK. That's not my taste though, especially if only included by files in the firmware_class directory. Less pollution/namespace collision in include/linux cheers, Joe -
Aug 19, 6:31 pm 2007
Randy Dunlap
Re: [PATCH 4/5] Documentation/firmware/... convert #include ...
It's not only included in that directory. I find it included in 88 source files throughout the kernel tree. --- ~Randy *** Remember to use Documentation/SubmitChecklist when testing your code *** -
Aug 19, 6:41 pm 2007
Joe Perches
[PATCH 3/5] drivers/scsi/... convert #include "linux/..." to...
(untested) There are several files that #include "linux/file" not #include <linux/file> #include "asm/file" not #include <asm/file> Here's a little script that converts them: egrep -i -r -l --include=*.[ch] \ "^[[:space:]]*\#[[:space:]]*include[[:space:]]*\"(linux|asm)/(.*)\"" * \ | xargs sed -i -e 's/^[[:space:]]*#[[:space:]]*include[[:space:]]*"\(linux\|asm\)\/\(.*\)"/#include <\1\/\2>/g' Signed-off-by: Joe Perches <joe@perches.com> diff --git a/drivers/scsi/aic...
Aug 19, 6:19 pm 2007
Joe Perches
[PATCH 2/5] drivers/char/... convert #include "linux/..." to...
(untested) There are several files that #include "linux/file" not #include <linux/file> #include "asm/file" not #include <asm/file> Here's a little script that converts them: egrep -i -r -l --include=*.[ch] \ "^[[:space:]]*\#[[:space:]]*include[[:space:]]*\"(linux|asm)/(.*)\"" * \ | xargs sed -i -e 's/^[[:space:]]*#[[:space:]]*include[[:space:]]*"\(linux\|asm\)\/\(.* \)"/#include <\1\/\2>/g' Signed-off-by: Joe Perches <joe@perches.com> diff --git a/drivers/char/...
Aug 19, 6:18 pm 2007
Joe Perches
convert #include "linux/..." to #include <linux/...> [...
There are several files that: #include "linux/file" not #include <linux/file> #include "asm/file" not #include <asm/file> Here's a little script that converts them: egrep -i -r -l --include=*.[ch] \ "^[[:space:]]*\#[[:space:]]*include[[:space:]]*\"(linux|asm)/(.*)\"" * \ | xargs sed -i -e 's/^[[:space:]]*#[[:space:]]*include[[:space:]]*"\(linux\|asm\)\/\(.*\)"/#include <\1\/\2>/g' Maybe a similar check could be added to checkpatch.pl -
Aug 19, 6:17 pm 2007
Jan Engelhardt
Re: convert #include "linux/..." to #include <linux/...&g...
Not only that. All directories in include should be checked against (e.g. <net/*>) Jan -- -
Aug 19, 6:33 pm 2007
Joe Perches
Re: convert #include "linux/..." to #include <linux/...&g...
Should any file in include/ have a line like: #include "[path/]file" Shouldn't these all be #include <path/file> ? -
Aug 19, 7:05 pm 2007
Al Viro
Re: convert #include "linux/..." to #include <linux/...&g...
Except that some instances are legitimate (e.g. there was a bunch in arch/um, IIRC)... -
Aug 19, 6:44 pm 2007
Joe Perches
Re: convert #include "linux/..." to #include <linux/...&g...
I guess it's a good thing that vger seems to have rejected that 140KB patch I sent against arch/um and include/asm-um. cheers, Joe -
Aug 19, 6:49 pm 2007
Al Viro
Re: convert #include "linux/..." to #include <linux/...&g...
It would be a better thing if you * did builds of the patched trees (allmodconfig for uml/i386 and uml/amd64 in this case) * figured out that one can send a reference to branch in git tree (with summary/shortlog/diffstat) using somewhat less than 140KB... -
Aug 19, 6:58 pm 2007
Jesper Juhl
Re: convert #include "linux/..." to #include <linux/...&g...
If you've actually checked that such conversions are correct and work fine, how about a patch (or patches)? -- Jesper Juhl <jesper.juhl@gmail.com> Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html Plain text mails only, please http://www.expita.com/nomime.html -
Aug 19, 6:19 pm 2007
h.verhagen.web104
kernel BUG at lib/list_debug.c:27!
Hi, According to dmesg, I encountered a kernel bug on my system. I'm not sure if this is the appropriate place to report this problem as this occured on a Fedora kernel. Maybe its a general problem? kernel BUG at lib/list_debug.c:27! invalid opcode: 0000 [2] SMP =========================================== = What was I doing when this happened. ========================================== I was doing a rm -rf /media/somedir/ command on a USB harddisk. This USB harddisk casing contai...
Aug 19, 4:50 pm 2007
Rafael J. Wysocki
Re: CONFIG_SUSPEND and power consumption
Hi, Do you have CONFIG_HIBERNATION set? If not, please see if setting it instead of CONFIG_SUSPEND leads to the same result on the affected box (ie. running at lower temperatures). Greetings, Rafael -
Aug 19, 4:42 pm 2007
Felix Marti
RE: [ofa-general] Re: [PATCH RFC] RDMA/CMA: Allocate PS_TCPp...
[Felix Marti] You're not at all addressing the fact that RDMA does solve the memory BW problem and stateless offload doesn't. Apart from that, I don't quite understand your argument with respect to the benefits of the RDMA infrastructure; what benefits does the TSO infrastructure give the non-TSO capable devices? Isn't the answer none and yet you added TSO support?! I don't think that the argument is stateless _versus_ stateful offload both have their advantages and disadvantages. Stateless offload d...
Aug 19, 3:49 pm 2007
Andi Kleen
Re: [ofa-general] Re: [PATCH RFC] RDMA/CMA: Allocate PS_TCPp...
It improves performance on software queueing devices between guests and hypervisors. This is a more and more important application these days. Even when the system running the Hypervisor has a non TSO capable device in the end it'll still save CPU cycles this way. Right now virtualized IO tends to much more CPU intensive than direct IO so any help it can get is beneficial. It also makes loopback faster, although given that's probably not that useful. And a lot of the "TSO infrastructure" was ...
Aug 19, 7:27 pm 2007
David Miller
Re: [ofa-general] Re: [PATCH RFC] RDMA/CMA: Allocate PS_TCPp...
From: Andi Kleen <andi@firstfloor.org> And also, you can enable TSO generation for a non-TSO-hw device and get all of the segmentation overhead reduction gains which works out as a pure win as long as the device can at a minimum do checksumming. -
Aug 19, 7:12 pm 2007
David Miller
Re: [ofa-general] Re: [PATCH RFC] RDMA/CMA: Allocate PS_TCPp...
From: "Felix Marti" <felix@chelsio.com> It does, I just didn't retort to your claims because they were so blatantly wrong. -
Aug 19, 7:04 pm 2007
Sergei Shtylyov
[PATCH 2/4] hpt366: UltraDMA filter for SATA cards (take 2)
The Marvell bridge chips used on HighPoint SATA cards do not seem to support the UltraDMA modes 1, 2, and 3 as well as any MWDMA modes, so the driver needs to account for this in the udma_filter() method. In order to achieve that, do the following changes: - install the method for all chips, not only HPT36x/370 and impove the code formatting by killing the extra tabs while at it; - add to the end of the 'switch' statement in the method cases for HPT372[AN] and HPT374 chips upon which the kno...
Aug 19, 3:00 pm 2007
Sergei Shtylyov
[PATCH 1/4] ide: add ide_dev_is_sata() helper
Make the SATA drive detection code from eighty_ninty_three() into inline ide_dev_is_sata() helper fixing it along the way to be more strict while checking word 80 for the reserved values... Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> --- This is against the current Linus tree and unfortunately I was able to only compile test it since that tree gives MODPOST warning and dies early on bootup. Well, I also have no SATA drive at hand... :-) drivers/ide/ide-iops.c | 3 +-- i...
Aug 19, 2:59 pm 2007
Stephen Hemminger
Re: Marvell 88E8056 gigabit ethernet controller
The driver prints some chip version info at startup, that might be helpful in disambiguating good/bad versions: dmesg | grep sky2 -
Aug 19, 2:34 pm 2007
Eric Preston
Re: Marvell 88E8056 gigabit ethernet controller
sky2 0000:03:00.0: v1.16 addr 0xfa000000 irq 16 Yukon-EC Ultra (0xb4) rev 2 sky2 eth0: addr XX:XX:XX:XX:XX sky2 eth0: enabling interface sky2 eth0: ram buffer 0K sky2 eth0: disabling interface -E --- Eric Preston, RHCA, RHCSS, RHCE Open Source Software Consultant // Administrator, Developer, Trainer 514-312-7072 -
Aug 19, 7:04 pm 2007
Kevin E
Re: Marvell 88E8056 gigabit ethernet controller
--- Stephen Hemminger Here's the output from the working MB: sky2 0000:04:00.0: v1.14 addr 0xf8000000 irq 16 Yukon-EC Ultra (0xb4) rev 3 sky2 eth0: addr 00:1a:4d:42:61:46 sky2 eth0: enabling interface sky2 eth0: ram buffer 0K sky2 eth0: Link is up at 100 Mbps, full duplex, flow control both The broken MB there's no output in dmesg but there is in /var/log/messages (I just rebooted the machine to get the output): Aug 19 14:56:42 www kernel: sky2 0000:04:00.0: v1.14 addr 0xf8000000 irq ...
Aug 19, 3:13 pm 2007
Costas Sismanis
kernel bug
verlinux output If some fields are empty or look unusual you may have an old version. Compare to the current minimal requirements in Documentation/Changes. Linux gemini 2.6.22-gentoo-r2 #1 PREEMPT Tue Aug 14 19:55:49 EEST 2007 i686 AMD Athlon(tm) XP 1700+ AuthenticAMD GNU/Linux Gnu C 4.1.2 Gnu make 3.81 binutils 2.17 util-linux 2.12r mount 2.12r module-init-tools 3.2.2 e2fsprogs 1.39 reiserfspro...
Aug 19, 2:33 pm 2007
Evgeniy Dushistov
[PATCH] ufs fix sun state
Different types of ufs hold state in different places, to hide complexity of this, there is ufs_get_fs_state, it returns state according to "UFS_SB(sb)->s_flags", but during mount ufs_get_fs_state is called, before setting s_flags, this cause message for ufs types like sun ufs: "fs need fsck", and remount in readonly state. This patch depend on other patches that now in -mm branch. Signed-off-by: Evgeniy Dushistov <dushistov@mail.ru> --- Index: linux-2.6.23-rc3-git1/fs/ufs/super...
Aug 19, 2:04 pm 2007
Felix Marti
RE: [ofa-general] Re: [PATCH RFC] RDMA/CMA: Allocate PS_TCPp...
[Felix Marti] Ouch, and I believed linux to be a leading edge OS, scaling from small embedded systems to hundreds of CPUs and hence [Felix Marti] Aren't you confusing memory and bus BW here? - RDMA enables DMA from/to application buffers removing the user-to-kernel/ kernel-to-user memory copy with is a significant overhead at the rates we're talking about: memory copy at 20Gbps (10Gbps in and 10Gbps out) requires 60Gbps of BW on most common platforms. So, receiving and transmitting at 10Gbps wi...
Aug 19, 1:33 pm 2007
David Miller
Re: [ofa-general] Re: [PATCH RFC] RDMA/CMA: Allocate PS_TCPp...
From: "Felix Marti" <felix@chelsio.com> This thing you call "sprinkled" is a necessity of any hardware offload when it is possible for a packet to later get "steered" to a device which cannot perform the offload. Therefore we need a software implementation of TSO so that those packets can still get output to the non-TSO-capable device. We do the same thing for checksum offloading. And for free we can use the software offloading mechanism to get batching to arbitrary network devices, ev...
Aug 19, 3:32 pm 2007
Bodo Eggert
Re: group ownership of tun devices -- nonfunctional?
Mike Mohr <akihana@gmail.com> wrote: IMHO the check is broken: + if (((tun->owner != -1 && + current->euid != tun->owner) || + (tun->group != -1 && + current->egid != tun->group)) && + !capable(CAP_NET_ADMIN)) return -EPERM; It should be something like: + if (!((tun->owner == tun->owner) || + ...
Aug 19, 12:05 pm 2007
Rene Herman Aug 19, 12:10 pm 2007
Bodo Eggert
Re: group ownership of tun devices -- nonfunctional?
Argh, I edited asuming the same order of variables. Substitute The intended semantics is If the user is not * the allowed user or * member of the allowed group or * cabable of CAP_NET_ADMIN then error out. I'm asuming Thinking about it, maybe you should check each group, not just the effective group. In that case, my change would be still wrong. However, I'm not going to fix this anytime soon. -- Funny quotes: 15. I drive way too fast to worry about cholesterol. -
Aug 19, 5:42 pm 2007
Rene Herman
Re: group ownership of tun devices -- nonfunctional?
There is a short description of the desired semantics in the link that was posted: http://lkml.org/lkml/2007/6/18/228 === The user now is allowed to send packages if either his euid or his egid matches the one specified via tunctl (via -u or -g respecitvely). If both gid and uid are set via tunctl, both have to match. === Paraphrasing the original code above, it's saying: if ((owner_is_set && does_not_match) || (group_is_set && does_not_match)) bugger_off_unless(CAP_N...
Aug 19, 7:24 pm 2007
richard kennedy
Re: 2.6.23-rc2-mm2
Hi Andrew, the git tree you mentioned in the boilerplate doesn't seem to have been updated in about 7 weeks. 2.6.22-rc6-mm1 is the last tag I can see on the summary page. Is something broken ? Cheers Richard -
Aug 19, 11:56 am 2007
Oleg Nesterov
[RFC,PATCH] fix /sbin/init signal handling
(Not for inclusion yet, against 2.6.23-rc2, untested) Currently, /sbin/init is protected from unhandled signals by the "current == child_reaper(current)" check in get_signal_to_deliver(). This is not enough, we have multiple problems: - this doesn't work for multi-threaded inits, and we can't fix this by simply making this check group-wide. - /sbin/init and kernel threads are not protected from handle_stop_signal(). Minor problem, but not good and allows to "steal" SIGCONT or change...
Aug 19, 11:08 am 2007
Sergei Shtylyov
[PATCH 2/2] pdc202xx_new: switch to using pci_get_slot() (ta...
Switch to using pci_get_slot() in init_setup_pdc20270() to get to the mate chip behind DC21150 bridge as there's no need for the driver itself to walk the list of the PCI devices (and the driver didn't check the bus # of the found device). While at it, make it emit warning about IRQ # being fixed up (just like hpt366.c does) and "beautify" this whole function as well as init_setup_pdc20276()... Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> --- This patch is against the current Li...
Aug 19, 10:57 am 2007
Sergei Shtylyov
[PATCH 1/2] pdc202xx_new: fix PCI refcounting
The driver erroneously "lets go" the mate IDE chip in init_setup_pdc20270() when ide_setup_pci_devices() call succeeds -- fix this, and drop a couple of useless assignments in this function while at it... Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> --- This patch is against the current Linus' tree, it has only been compile tested since I do not have PDC2027x chips (and even less so behind DC21150 bridge :-). I'm reposting the patchset a wider audience now... drivers/ide/pci...
Aug 19, 10:53 am 2007
Eugene Teo
[PATCH] Fix tsk->exit_state usage (resend)
tsk->exit_state can only be 0, EXIT_ZOMBIE, or EXIT_DEAD. A non-zero test is the same as tsk->exit_state & (EXIT_ZOMBIE | EXIT_DEAD), so just testing tsk->exit_state is sufficient. Signed-off-by: Eugene Teo <eugeneteo@kernel.sg> --- fs/proc/array.c | 3 +-- kernel/fork.c | 2 +- kernel/sched.c | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/fs/proc/array.c b/fs/proc/array.c index 965625a..babb24d 100644 --- a/fs/proc/array.c +++ b/fs/proc...
Aug 19, 10:24 am 2007
Adrian Bunk
sched.c: why -fno-omit-frame-pointer?
kernel/sched.c gets compiled with -fno-omit-frame-pointer, and this was already done in kernel 1.0 (sic). Later, it has been modified to be this way only on some architectures. It might not be an earthshaking amount, but removing it saves some bytes, and there's no visible breakage when running the modified kernel on i386. $ ls -la kernel/sched.o* -rw-rw-r-- 1 bunk bunk 25600 2007-08-19 16:10 kernel/sched.o -rw-rw-r-- 1 bunk bunk 26084 2007-08-19 16:03 kernel/sched.o.old $ size kernel/sche...
Aug 19, 10:17 am 2007
Andi Kleen
Re: sched.c: why -fno-omit-frame-pointer?
It's needed so that the WCHAN /proc display can backtrace one level up out of schedule() -Andi -
Aug 19, 7:00 pm 2007
Arjan van de Ven
Re: sched.c: why -fno-omit-frame-pointer?
vague memory: this was needed for wchan to work properly -
Aug 19, 5:05 pm 2007
Atsushi Nemoto
[PATCH] rtc: Make rtc-ds1742 driver hotplug-aware (take 2)
The rtc-ds1742 platform driver name doesn't match its module name, which might prevents it from properly hotplugging. There is only two in-tree user of its driver, which are fixed by this patch too. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> --- arch/mips/jmr3927/rbhma3100/setup.c | 2 +- .../toshiba_rbtx4927/toshiba_rbtx4927_setup.c | 2 +- drivers/rtc/rtc-ds1742.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) d...
Aug 19, 9:32 am 2007
Atsushi Nemoto
[PATCH] rtc: Make rtc-ds1553 driver hotplug-aware (take 3)
The rtc-ds1553 platform driver name doesn't match its module name, which might prevent it from properly hotplugging. This driver has no in-tree users. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> --- The "take 2" of this patch was just a typo-fix ("1553" vs. "1742"). diff --git a/drivers/rtc/rtc-ds1553.c b/drivers/rtc/rtc-ds1553.c index 46da571..a4bcb34 100644 --- a/drivers/rtc/rtc-ds1553.c +++ b/drivers/rtc/rtc-ds1553.c @@ -395,7 +395,7 @@ static struct platform_driver ds1553_rt...
Aug 19, 9:32 am 2007
Atsushi Nemoto
[PATCH] rtc: Make rtc-rs5c348 driver hotplug-aware (take 2)
The rtc-rs5c348 SPI driver name doesn't match its module name, which prevents it from properly hotplugging. There is only one in-tree user of its driver, which is fixed by this patch too. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> --- arch/mips/tx4938/toshiba_rbtx4938/setup.c | 2 +- drivers/rtc/rtc-rs5c348.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/mips/tx4938/toshiba_rbtx4938/setup.c b/arch/mips/tx4938/toshiba_rbtx4938/se...
Aug 19, 9:32 am 2007
Jan Engelhardt
[no patch] Remove more double inclusions
Hi, Pipes for the world... find . -type f -iname "*.[ch]" -print0 | \ xargs -0 grep -P '#\s*include' /dev/null | \ sort | \ uniq -c | \ sort -gr | \ less -MSi turns up all the double-inclusions. Needs someone to review, because odd things like /* meh */ #if defined(ABC) # include "foo.h" #elif defined(DEF) # include "foo.h" #else # whatever #endif are done. Or, that <foo.h> actually changes its meaning depending on a macro... /* ugly */ #defin...
Aug 19, 9:30 am 2007
Jesper Juhl
Re: [no patch] Remove more double inclusions
I believe I've already got patches for almost all of these sitting in -mm & various subsystem trees. Most of them will probably hit mainline during the next merge window, so before doing a lot of duplicate work I'd suggest waiting for 2.6.24-rc1 before working on this any further - or at least check -mm and the various maintainer/subsystem trees first. -- Jesper Juhl <jesper.juhl@gmail.com> Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html Plain text mails only, plea...
Aug 19, 1:42 pm 2007
Avi Kivity
[PATCH] KVM: Avoid calling smp_call_function_single() with i...
When taking a cpu down, we need to hardware_disable() it. Unfortunately, the CPU_DYING notifier is called with interrupts disabled, which means we can't use smp_call_function_single(). Fortunately, the CPU_DYING notifier is always called on the dying cpu, so we don't need to use the function at all and can simply call hardware_disable() directly. Tested-by: Paolo Ornati <ornati@fastwebnet.it> Signed-off-by: Avi Kivity <avi@qumranet.com> --- Linus, please apply to -rc. drivers/k...
Aug 19, 8:57 am 2007
previous daytodaynext day
August 18, 2007August 19, 2007August 20, 2007