master.kernel.org:/home/torvalds/BK/linux-2.6
rddunlap@osdl.org[torvalds]|ChangeSet|20050228183343|05797 rddunlap
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2005/02/28 10:33:43-08:00 rddunlap@osdl.org 
#   [PATCH] rrunner: fix section references
#   
#   rrunner: references __initdata in a __devinit function; data should
#     be __devinitdata;
#   
#   Error: ./drivers/net/rrunner.o .text refers to 00000000000002b2 R_X86_64_32S      .init.data
#   
#   Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
#   Signed-off-by: Jes Sorensen <jes@wildopensource.com>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# drivers/net/rrunner.c
#   2005/02/27 22:14:12-08:00 rddunlap@osdl.org +1 -1
#   rrunner: fix section references
# 
# ChangeSet
#   2005/02/28 10:33:30-08:00 rddunlap@osdl.org 
#   [PATCH] hp100: fix section references
#   
#   hp100: references __init code that should be marked as __devinit;
#   
#   Error: ./drivers/net/hp100.o .text refers to 0000000000000f7f R_X86_64_PC32     .init.text+0x00000000000000b8
#   
#   Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# drivers/net/hp100.c
#   2005/02/27 22:07:53-08:00 rddunlap@osdl.org +3 -3
#   hp100: fix section references
# 
# ChangeSet
#   2005/02/28 10:33:16-08:00 randy.dunlap@verizon.net 
#   [PATCH] dc395x: fix section references
#   
#   dc395x scsi driver makes many references to __init functions &
#   __initdata that should be __devinit & __devinitdata.
#   
#   Error: ./drivers/scsi/dc395x.o .text refers to 00000000000021ef R_X86_64_PC32     .init.text+0x00000000000000b4
#   Error: ./drivers/scsi/dc395x.o .text refers to 000000000000220e R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 000000000000222e R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 00000000000022f4 R_X86_64_PC32     .init.text+0x0000000000000177
#   Error: ./drivers/scsi/dc395x.o .text refers to 0000000000002301 R_X86_64_32S      .init.data
#   Error: ./drivers/scsi/dc395x.o .text refers to 0000000000002307 R_X86_64_32S      .init.data+0x0000000000000004
#   Error: ./drivers/scsi/dc395x.o .text refers to 000000000000230f R_X86_64_32S      .init.data+0x0000000000000008
#   Error: ./drivers/scsi/dc395x.o .text refers to 0000000000002317 R_X86_64_32S      .init.data+0x000000000000000c
#   Error: ./drivers/scsi/dc395x.o .text refers to 000000000000231d R_X86_64_32S      .init.data
#   Error: ./drivers/scsi/dc395x.o .text refers to 000000000000232d R_X86_64_PC32     .init.text+0xfffffffffffffffc
#   Error: ./drivers/scsi/dc395x.o .text refers to 000000000000237a R_X86_64_PC32     .init.text+0x00000000000000b4
#   Error: ./drivers/scsi/dc395x.o .text refers to 000000000000238c R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 00000000000023ac R_X86_64_PC32     .init.text+0x00000000000000b4
#   Error: ./drivers/scsi/dc395x.o .text refers to 00000000000023d6 R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 00000000000023e6 R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 00000000000023fe R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 000000000000240b R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 0000000000002418 R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 000000000000242f R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 000000000000243f R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 0000000000002469 R_X86_64_PC32     .init.text+0x00000000000000b4
#   Error: ./drivers/scsi/dc395x.o .text refers to 0000000000002476 R_X86_64_PC32     .init.text+0x000000000000009c
#   Error: ./drivers/scsi/dc395x.o .text refers to 0000000000002489 R_X86_64_PC32     .init.data+0x0000000000000060
#   Error: ./drivers/scsi/dc395x.o .text refers to 0000000000002494 R_X86_64_PC32     .init.text+0x0000000000000177
#   Error: ./drivers/scsi/dc395x.o .text refers to 00000000000024a3 R_X86_64_32S      .init.data+0x0000000000000078
#   Error: ./drivers/scsi/dc395x.o .text refers to 00000000000024ac R_X86_64_PC32     .init.text+0xfffffffffffffffc
#   
#   Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# drivers/scsi/dc395x.c
#   2005/02/27 20:30:12-08:00 randy.dunlap@verizon.net +21 -21
#   dc395x: fix section references
# 
# ChangeSet
#   2005/02/28 10:33:01-08:00 rddunlap@osdl.org 
#   [PATCH] isdn: use __init for ICCVersion()
#   
#   ICCVersion() is only used by init code & can be marked __init;
#   
#   Error: ./drivers/isdn/hisax/icc.o .text refers to 000000000000014a R_X86_64_32S      .init.data
#   
#   Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# drivers/isdn/hisax/icc.h
#   2005/02/27 19:10:41-08:00 rddunlap@osdl.org +1 -1
#   isdn: use __init for ICCVersion()
# 
# drivers/isdn/hisax/icc.c
#   2005/02/27 19:10:34-08:00 rddunlap@osdl.org +1 -1
#   isdn: use __init for ICCVersion()
# 
# ChangeSet
#   2005/02/28 10:32:47-08:00 rddunlap@osdl.org 
#   [PATCH] sound/oss/opl3as2: fix init section reference
#   
#   sound/oss/opl3sa2:  calls __init function during probe, which may
#   be after init for PNP devices;
#   
#   Error: ./sound/oss/opl3sa2.o .text refers to 0000000000000204 R_X86_64_PC32     .init.text+0xfffffffffffffffc                                                   Error: ./sound/oss/opl3sa2.o .text refers to 0000000000000210 R_X86_64_PC32     .init.text+0xfffffffffffffffc                                                   Error: ./sound/oss/opl3sa2.o .text refers to 000000000000021c R_X86_64_PC32     .init.text+0xfffffffffffffffc
#   
#   Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# sound/oss/opl3sa2.c
#   2005/02/27 17:08:18-08:00 rddunlap@osdl.org +1 -1
#   sound/oss/opl3as2: fix init section reference
# 
# ChangeSet
#   2005/02/28 10:32:33-08:00 rddunlap@osdl.org 
#   [PATCH] sonicvibes: fix initdata references
#   
#   sonicvibes:  _devinit function was referencing __initdata (2x),
#   which should be __devinitdata;
#   
#   Error: ./sound/oss/sonicvibes.o .text refers to 0000000000003ca7 R_X86_64_32S      .init.data+0x0000000000000080                                                Error: ./sound/oss/sonicvibes.o .text refers to 00000000000043eb R_X86_64_32S      .init.data+0x0000000000000024                                                Error: ./sound/oss/sonicvibes.o .text refers to 00000000000043f2 R_X86_64_32S      .init.data+0x0000000000000020
#   
#   Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# sound/oss/sonicvibes.c
#   2005/02/27 16:37:45-08:00 rddunlap@osdl.org +2 -2
#   sonicvibes: fix initdata references
# 
# ChangeSet
#   2005/02/28 10:32:19-08:00 rddunlap@osdl.org 
#   [PATCH] sound/oss/aedsp16: init/exit section cleanups:
#   
#   Exit-only function uninit_aedsp16() was marked __init instead of __exit;
#   ae_config data was marked __initdata but used during exit;
#   several cleanup functions were marked _init but used for init or exit
#     cleanups;
#   
#   Error: ./sound/oss/aedsp16.o .exit.text refers to 0000000000000004 R_X86_64_PC32     .init.data+0x000000000000003b
#   Error: ./sound/oss/aedsp16.o .exit.text refers to 000000000000000c R_X86_64_PC32     .init.text+0x00000000000001e4
#   Error: ./sound/oss/aedsp16.o .exit.text refers to 0000000000000013 R_X86_64_PC32     .init.text+0x0000000000000034
#   Error: ./sound/oss/aedsp16.o .exit.text refers to 0000000000000019 R_X86_64_PC32     .init.data+0x000000000000003f
#   Error: ./sound/oss/aedsp16.o .exit.text refers to 0000000000000023 R_X86_64_PC32     .init.text+0x00000000000001b4
#   
#   Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# sound/oss/aedsp16.c
#   2005/02/27 16:07:31-08:00 rddunlap@osdl.org +5 -5
#   sound/oss/aedsp16: init/exit section cleanups:
# 
# ChangeSet
#   2005/02/28 10:28:19-08:00 axboe@suse.de 
#   [PATCH] [PATCH] Fix bounced bio and dm panic
#   
#   Make sure that a bio doesn't contain NULL pages in the front of its vec,
#   if a device bounces a bio that doesn't start from 0.
#   
#   Problem noted by Mark Haverkamp.
#   
#   Signed-off-by: Jens Axboe <axboe@suse.de>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# mm/highmem.c
#   2005/02/28 09:40:57-08:00 axboe@suse.de +1 -1
#   [PATCH] Fix bounced bio and dm panic
# 
# ChangeSet
#   2005/02/28 08:36:29-08:00 andrea@suse.de 
#   [PATCH] Make the new merged pipe writes check for SIGPIPE
#   
#   The new pipe buffer merging doesn't check for the "no readers" case, so
#   with small writes that coalesce, we may not get a timely SIGPIPE/EPIPE
#   notification to the writer.
#   
#   Signed-off-by: Andrea Arcangeli <andrea@suse.de>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# fs/pipe.c
#   2005/02/27 19:47:26-08:00 andrea@suse.de +6 -0
#   Make the new merged pipe writes check for SIGPIPE
# 
# ChangeSet
#   2005/02/28 08:36:14-08:00 torvalds@ppc970.osdl.org 
#   Make pipe "poll()" take direction of pipe into account.
#   
#   The pipe code has traditionally not cared about which end-point of the
#   pipe you are polling, meaning that if you poll the write-only end of a
#   pipe, it will still set the "this pipe is readable" bits if there is
#   data to be read on the read side.
#   
#   That makes no sense, and together with the new bigger buffers breaks
#   python-twisted.
#   
#   Based on debugging/patch by Andrea Arcangeli and testcase from
#   Thomas Crhak
# 
# fs/pipe.c
#   2005/02/28 08:36:06-08:00 torvalds@ppc970.osdl.org +11 -6
#   Make pipe "poll()" take direction of pipe into account.
# 
# ChangeSet
#   2005/02/27 16:10:07-08:00 rddunlap@osdl.org 
#   [PATCH] srat: initdata section references
#   
#   srat's node_to_pxm() references pxm2node[] after init. so pxm2node[]
#   should not be __initdata.
#   
#   Error: ./arch/x86_64/mm/srat.o .text refers to 0000000000000008 R_X86_64_32S      .init.data
#   Error: ./arch/x86_64/mm/srat.o .text refers to 0000000000000015 R_X86_64_32S      .init.data
#   
#   Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# arch/x86_64/mm/srat.c
#   2005/02/27 14:46:03-08:00 rddunlap@osdl.org +1 -1
#   srat: initdata section references
# 
# ChangeSet
#   2005/02/27 11:15:10-08:00 davem@nuts.davemloft.net 
#   [AF_UNIX]: Fix SIOCINQ for STREAM and SEQPACKET.
#   
#   We should report the total bytes in the whole receive
#   queue, not just the first packet, in these cases.
#   
#   Reported by Uwe Bonnes.
#   
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# net/unix/af_unix.c
#   2005/02/27 11:14:00-08:00 davem@nuts.davemloft.net +10 -3
#   [AF_UNIX]: Fix SIOCINQ for STREAM and SEQPACKET.
# 
# ChangeSet
#   2005/02/27 11:10:03-08:00 davem@nuts.davemloft.net 
#   [IPV4]: Fix lost routes in fn_hash netlink dumps.
#   
#   Spotted by itkes@fat.imed.msu.ru, the fn_hash_dump_bucket() main
#   loop does not increment 'i' properly, and thus routes will not
#   be listed, when the test 'i < s_i' passes.
#   
#   The bug was added when the code was converted over to
#   hlist_for_each_entry() by your's truly.
#   
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# net/ipv4/fib_hash.c
#   2005/02/27 11:07:04-08:00 davem@nuts.davemloft.net +2 -2
#   [IPV4]: Fix lost routes in fn_hash netlink dumps.
# 
# ChangeSet
#   2005/02/26 10:12:16-08:00 torvalds@ppc970.osdl.org 
#   Properly limit keyboard keycodes to KEY_MAX.
#   
#   It can only be set by root, but let's not tempt people to do
#   things that can't work.
# 
# drivers/char/keyboard.c
#   2005/02/26 10:12:08-08:00 torvalds@ppc970.osdl.org +2 -0
#   Properly limit keyboard keycodes to KEY_MAX.
#   
#   It can only be set by root, but let's not tempt people to do
#   things that can't work.
# 
# ChangeSet
#   2005/02/26 10:03:27-08:00 Andries.Brouwer@cwi.nl 
#   [PATCH] more apic.c
#   
#   setup_APIC_timer is only called in __init context and uses __initdata
# 
# arch/i386/kernel/apic.c
#   2005/02/26 07:13:21-08:00 Andries.Brouwer@cwi.nl +1 -1
#   more apic.c
# 
# ChangeSet
#   2005/02/26 10:03:13-08:00 Andries.Brouwer@cwi.nl 
#   [PATCH] __initdata in apic.c
#   
#   wait_timer_tick refers to the __init functions wait_8254_wraparound
#   or wait_hpet_tick, hence must be __initdata.
# 
# arch/i386/kernel/apic.c
#   2005/02/26 06:59:17-08:00 Andries.Brouwer@cwi.nl +1 -1
#   __initdata in apic.c
# 
# ChangeSet
#   2005/02/26 10:02:59-08:00 Andries.Brouwer@cwi.nl 
#   [PATCH] remove __initdata in scsi_devinfo.c
#   
#   scsi_dev_flags is referred to in
#   module_param_string(dev_flags, scsi_dev_flags, sizeof(scsi_dev_flags), 0);
# 
# drivers/scsi/scsi_devinfo.c
#   2005/02/26 05:30:15-08:00 Andries.Brouwer@cwi.nl +1 -1
#   remove __initdata in scsi_devinfo.c
# 
# ChangeSet
#   2005/02/26 10:02:45-08:00 Andries.Brouwer@cwi.nl 
#   [PATCH] __init in cfq-iosched.c
#   
#   cfq_init() calls __init cfq_slab_setup and hence must be __init itself
#   
#   also made it static
# 
# drivers/block/cfq-iosched.c
#   2005/02/26 05:18:00-08:00 Andries.Brouwer@cwi.nl +1 -1
#   __init in cfq-iosched.c
# 
# ChangeSet
#   2005/02/26 10:02:30-08:00 Andries.Brouwer@cwi.nl 
#   [PATCH] __devinitdata in parport_pc
#   
#   parport_init_mode is referred to in int __devinit sio_via_probe().
# 
# drivers/parport/parport_pc.c
#   2005/02/26 05:06:23-08:00 Andries.Brouwer@cwi.nl +1 -1
#   __devinitdata in parport_pc
# 
# ChangeSet
#   2005/02/25 20:28:59-08:00 aurelien@aurel32.net 
#   [PATCH] USB: Fix usbfs regression
#   
#   I have just tested kernel version 2.6.11-rc5 and noticed it is not
#   possible to do an USB transfer by submitting an URB to an output
#   endpoint.  This breaks newest versions of libusb and thus SANE, gphoto2,
#   and a lot of software.
#   
#   The bug was introduced in version 2.6.11-rc1 and is due to a wrong
#   comparison. 
#   
#   Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
#   Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# drivers/usb/core/devio.c
#   2005/02/25 18:16:15-08:00 aurelien@aurel32.net +1 -1
#   USB: Fix usbfs regression
# 
# ChangeSet
#   2005/02/25 19:39:39-08:00 torvalds@ppc970.osdl.org 
#   Fix possible pty line discipline race.
#   
#   This ain't pretty. Real fix under discussion.
# 
# drivers/char/pty.c
#   2005/02/25 19:39:32-08:00 torvalds@ppc970.osdl.org +4 -2
#   Fix possible pty line discipline race.
#   
#   This ain't pretty. Real fix under discussion.
# 
# ChangeSet
#   2005/02/25 16:51:25-08:00 olh@suse.de 
#   [PATCH] Fix incorrect __init on 'modedb[]' array
#   
#   modedb can not be __init because fb_find_mode() (which is not __init)
#   may get db == NULL.  fb_find_mode() is called from modules. 
#   
#   Signed-off-by: Olaf Hering <olh@suse.de>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# drivers/video/modedb.c
#   2005/02/25 16:37:43-08:00 olh@suse.de +1 -1
#   Fix incorrect __init on 'modedb[]' array
# 
# ChangeSet
#   2005/02/25 14:17:57-08:00 akpm@osdl.org 
#   [PATCH] binfmt_elf build fix
#   
#   The cast to void still triggers the gcc "warning: ignoring return value"
#   warning, which is dumb of it.  So ignore the return value differently.
#   
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# fs/binfmt_elf.c
#   2005/02/25 13:17:34-08:00 akpm@osdl.org +8 -7
#   binfmt_elf build fix
# 
# ChangeSet
#   2005/02/25 14:17:43-08:00 gregkh@suse.de 
#   [PATCH] USB: fix bug in acm's open function
#   
#   Here's a patch for 2.6.11-rc5 that a lot of cdc-acm driver users are
#   clamoring for.
#   
#   There's a bug introduced in a cleanup which will lead to a race making
#   reopenings fail.  This fix is by Alexander Lykanov.
#   
#   Signed-off-by: Oliver Neukum <oliver@neukum.name>
#   Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# drivers/usb/class/cdc-acm.c
#   2005/02/25 13:17:33-08:00 gregkh@suse.de +4 -4
#   USB: fix bug in acm's open function
# 
# ChangeSet
#   2005/02/25 14:17:30-08:00 dhowells@redhat.com 
#   [PATCH] Make keyctl(KEYCTL_JOIN_SESSION_KEYRING) use the correct arg
#   
#   The attached patch makes keyctl() use the correct argument when invoking
#   the KEYCTL_JOIN_SESSION_KEYRING function.
#   
#   I'm not sure how this evaded testing before, but I suspect the compiler was
#   kind and made both argument registers hold the same value.
#   
#   Thanks to Kevin Coffman <kwc@citi.umich.edu> for spotting this.
#   
#   Signed-Off-By: David Howells <dhowells@redhat.com>
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# security/keys/keyctl.c
#   2005/02/25 13:17:30-08:00 dhowells@redhat.com +1 -1
#   Make keyctl(KEYCTL_JOIN_SESSION_KEYRING) use the correct arg
# 
# security/keys/compat.c
#   2005/02/25 13:17:30-08:00 dhowells@redhat.com +1 -1
#   Make keyctl(KEYCTL_JOIN_SESSION_KEYRING) use the correct arg
# 
# ChangeSet
#   2005/02/25 19:47:46+00:00 rmk@flint.arm.linux.org.uk 
#   [ARM] Fix dma_mmap() size argument.
#   
#   We were passing the size of the region in pages, where as
#   remap_pfn_range expected the size in bytes.
#   
#   Signed-off-by: Russell King <rmk@arm.linux.org.uk>
# 
# arch/arm/mm/consistent.c
#   2005/02/25 19:42:41+00:00 rmk@flint.arm.linux.org.uk +2 -1
#   remap_pfn_range takes the size in bytes, not in pages.
# 
# ChangeSet
#   2005/02/25 08:48:33-08:00 david@gibson.dropbear.id.au 
#   [PATCH] ppc64: hugepage hash flushing bugfix
#   
#   This fixes a potentially bad (although very rarely triggered) bug in the
#   ppc64 hugepage code.
#   
#   hpte_update() did not correctly calculate the address for hugepages, so
#   pte_clear() (which we use for hugepage ptes as well as normal ones)
#   would not correctly flush the hash page table entry.  Under the right
#   circumstances this could potentially lead to duplicate hash entries,
#   which is very bad.
#   
#   davem's upcoming patch to pass the virtual address directly to set_pte()
#   and its ilk will obsolete this, but this is bad enough it should
#   probably be fixed in the meantime.
#   
#   Signed-off-by: David Gibson <dwg@au1.ibm.com>
#   Acked-by: William Irwin <wli@holomorphy.com>
#   Signed-off-by: Linus Torvalds <torvalds@osdl.org>
# 
# arch/ppc64/mm/tlb.c
#   2005/02/24 19:56:47-08:00 david@gibson.dropbear.id.au +6 -2
#   ppc64: hugepage hash flushing bugfix
# 
# ChangeSet
#   2005/02/24 12:02:05+01:00 bzolnier@trik.(none) 
#   [ide] fix IRQ masking in ide_do_request()
#   
#   Revert to previous way of handling masked_irq argument.
#   Reported to fix problems with shared PCI IRQs.
#   
#   Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
# 
# drivers/ide/ide-io.c
#   2005/02/24 12:01:54+01:00 bzolnier@trik.(none) +2 -2
#   [ide] fix IRQ masking in ide_do_request()
# 
# ChangeSet
#   2005/02/24 11:14:08+01:00 bzolnier@trik.(none) 
#   [ide] fix build for built-in hpt366 and modular ide-disk
#   
#   * always call __ide_do_rw_disk() in ide_do_rw_disk()
#   * modify ide_hwif_t->rw_disk hook accordingly
#   * update and cleanup hpt372n_rw_disk()
#     (the only user of ide_hwif_t->rw_disk hook)
#   * make __ide_do_rw_disk() static + fix comment
#   
#   Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
# 
# include/linux/ide.h
#   2005/02/23 19:58:29+01:00 bzolnier@trik.(none) +1 -2
#   [ide] fix build for built-in hpt366 and modular ide-disk
# 
# drivers/ide/pci/hpt366.c
#   2005/02/23 19:58:29+01:00 bzolnier@trik.(none) +11 -18
#   [ide] fix build for built-in hpt366 and modular ide-disk
# 
# drivers/ide/ide-disk.c
#   2005/02/23 19:58:29+01:00 bzolnier@trik.(none) +4 -6
#   [ide] fix build for built-in hpt366 and modular ide-disk
# 
# ChangeSet
#   2005/02/24 11:01:48+01:00 rddunlap@osdl.org 
#   [ide] make 1-bit fields unsigned
#   
#   It's a bit difficult to have a value and a sign bit in a
#   1-bit field.
#   
#   Fix (90) boolean/bitfield sparse warnings:
#   include/linux/ide.h:937:18: warning: dubious one-bit signed bitfield
#   include/linux/ide.h:939:17: warning: dubious one-bit signed bitfield
#   
#   Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
#   Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
# 
# include/linux/ide.h
#   2005/02/16 05:07:18+01:00 rddunlap@osdl.org +2 -2
#   [ide] make 1-bit fields unsigned
# 
# ChangeSet
#   2005/02/23 20:02:03-08:00 davem@nuts.davemloft.net 
#   Merge bk://bk.skbuff.net:20611/linux-2.6-sysctl/
#   into nuts.davemloft.net:/disk1/BK/net-2.6
# 
# include/linux/sysctl.h
#   2005/02/23 20:01:51-08:00 davem@nuts.davemloft.net +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/02/23 19:59:02-08:00 robert.olsson@data.slu.se 
#   [PKTGEN]: reduce stack usage
#   
#   From Randy Dunlap
#   
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# net/core/pktgen.c
#   2005/02/23 19:58:40-08:00 robert.olsson@data.slu.se +6 -17
#   [PKTGEN]: reduce stack usage
#   
#   From Randy Dunlap
#   
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# ChangeSet
#   2005/02/23 19:50:04-08:00 laforge@netfilter.org 
#   [NETFILTER]: ipt_hashlimit rule load time race condition
#   
#   This is the best we've got: We cannot release and re-grab lock,
#   since checkentry() is called before ip_tables.c grabs ipt_mutex.  
#   We also cannot grab the hashtable spinlock, since htable_create will 
#   call vmalloc, and that can sleep.  And we cannot just re-search
#   the list of htable's in htable_create(), since then we would
#   create duplicate proc files.
#   
#   Signed-off-by: Harald Welte <laforge@netfilter.org>
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# net/ipv4/netfilter/ipt_hashlimit.c
#   2005/02/23 19:49:42-08:00 laforge@netfilter.org +10 -0
#   [NETFILTER]: ipt_hashlimit rule load time race condition
#   
#   This is the best we've got: We cannot release and re-grab lock,
#   since checkentry() is called before ip_tables.c grabs ipt_mutex.  
#   We also cannot grab the hashtable spinlock, since htable_create will 
#   call vmalloc, and that can sleep.  And we cannot just re-search
#   the list of htable's in htable_create(), since then we would
#   create duplicate proc files.
#   
#   Signed-off-by: Harald Welte <laforge@netfilter.org>
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# ChangeSet
#   2005/02/23 19:48:15-08:00 robert.olsson@data.slu.se 
#   [PKTGEN]: Replace interruptible_sleep_on_timeout()
#   
#   From Nishanth Aravamudan <nacc@us.ibm.com>
#   
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# net/core/pktgen.c
#   2005/02/23 19:47:36-08:00 robert.olsson@data.slu.se +14 -11
#   [PKTGEN]: Replace interruptible_sleep_on_timeout()
# 
# ChangeSet
#   2005/02/23 19:44:58-08:00 yoshfuji@linux-ipv6.org 
#   [IPV6]: Unregister per-device snmp6 proc entry earlier.
#   
#   Do it in addrconf_ifdown.  This fixes OOPSes on shutdown
#   with 2.6.10
#   
#   Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
#   Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# net/ipv6/proc.c
#   2005/02/23 19:44:37-08:00 yoshfuji@linux-ipv6.org +16 -18
#   [IPV6]: Unregister per-device snmp6 proc entry earlier.
#   
#   Do it in addrconf_ifdown.  This fixes OOPSes on shutdown
#   with 2.6.10
#   
#   Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
#   Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# net/ipv6/af_inet6.c
#   2005/02/23 19:44:37-08:00 yoshfuji@linux-ipv6.org +4 -2
#   [IPV6]: Unregister per-device snmp6 proc entry earlier.
#   
#   Do it in addrconf_ifdown.  This fixes OOPSes on shutdown
#   with 2.6.10
#   
#   Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
#   Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# net/ipv6/addrconf.c
#   2005/02/23 19:44:37-08:00 yoshfuji@linux-ipv6.org +15 -1
#   [IPV6]: Unregister per-device snmp6 proc entry earlier.
#   
#   Do it in addrconf_ifdown.  This fixes OOPSes on shutdown
#   with 2.6.10
#   
#   Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
#   Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# include/net/ipv6.h
#   2005/02/23 19:44:37-08:00 yoshfuji@linux-ipv6.org +2 -0
#   [IPV6]: Unregister per-device snmp6 proc entry earlier.
#   
#   Do it in addrconf_ifdown.  This fixes OOPSes on shutdown
#   with 2.6.10
#   
#   Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
#   Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# ChangeSet
#   2005/02/23 19:38:18-08:00 kaber@trash.net 
#   [NETFILTER]: Prevent NAT from seeing fragments
#   
#   The path for loopback is:
#   LOCAL_OUT: conntrack defrags
#   POST_ROUTING: conntrack refrags
#   PRE_ROUTING: skip conntrack defrag because skb->nfct != NULL
#   PRE_ROUTING: NAT gets hit by fragments
#   
#   Always defrag on loopback if NAT is compiled in.
#   
#   Signed-off-by: Patrick McHardy <kaber@trash.net>
#   Acked-by: Rusty Russel <rusty@rustcorp.com.au>
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# net/ipv4/netfilter/ip_conntrack_standalone.c
#   2005/02/23 19:37:48-08:00 kaber@trash.net +2 -0
#   [NETFILTER]: Prevent NAT from seeing fragments
#   
#   The path for loopback is:
#   LOCAL_OUT: conntrack defrags
#   POST_ROUTING: conntrack refrags
#   PRE_ROUTING: skip conntrack defrag because skb->nfct != NULL
#   PRE_ROUTING: NAT gets hit by fragments
#   
#   Always defrag on loopback if NAT is compiled in.
#   
#   Signed-off-by: Patrick McHardy <kaber@trash.net>
#   Acked-by: Rusty Russel <rusty@rustcorp.com.au>
#   Signed-off-by: David S. Miller <davem@davemloft.net>
# 
# ChangeSet
#   2005/02/18 18:54:30+09:00 yoshfuji@linux-ipv6.org 
#   [IPV4] Use appropriate sysctl helpers for gc_min_interval_ms.
#   
#   Because its type is int, inappropriate to use ulong helpers.
#   This also fixes inconsistency between sysctl and procfs.
#   
#   Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
# 
# net/ipv4/route.c
#   2005/02/18 18:54:18+09:00 yoshfuji@linux-ipv6.org +3 -3
#   [IPV4] Use appropriate sysctl helpers for gc_min_interval_ms.
#   
#   Because its type is int, inappropriate to use ulong helpers.
#   This also fixes inconsistency between sysctl and procfs.
#   
#   Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
# 
# ChangeSet
#   2005/02/18 18:23:43+09:00 yoshfuji@linux-ipv6.org 
#   add sysctl helper functions to provide milliseconds-based interfaces.
#   
#   Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
# 
# kernel/sysctl.c
#   2005/02/18 18:23:31+09:00 yoshfuji@linux-ipv6.org +91 -0
#   add sysctl helper functions to provide milliseconds-based interfaces.
#   
#   Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
# 
# include/linux/sysctl.h
#   2005/02/18 18:23:31+09:00 yoshfuji@linux-ipv6.org +3 -0
#   add sysctl helper functions to provide milliseconds-based interfaces.
#   
#   Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
# 
diff -Nru a/arch/arm/mm/consistent.c b/arch/arm/mm/consistent.c
--- a/arch/arm/mm/consistent.c	2005-02-28 17:08:32 -08:00
+++ b/arch/arm/mm/consistent.c	2005-02-28 17:08:32 -08:00
@@ -293,7 +293,8 @@
 			vma->vm_flags |= VM_RESERVED;
 			ret = remap_pfn_range(vma, vma->vm_start,
 					      page_to_pfn(c->vm_pages) + off,
-					      user_size, vma->vm_page_prot);
+					      user_size << PAGE_SHIFT,
+					      vma->vm_page_prot);
 		}
 	}
 
diff -Nru a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c
--- a/arch/i386/kernel/apic.c	2005-02-28 17:08:32 -08:00
+++ b/arch/i386/kernel/apic.c	2005-02-28 17:08:32 -08:00
@@ -894,7 +894,7 @@
  * Default initialization for 8254 timers. If we use other timers like HPET,
  * we override this later
  */
-void (*wait_timer_tick)(void) = wait_8254_wraparound;
+void (*wait_timer_tick)(void) __initdata = wait_8254_wraparound;
 
 /*
  * This function sets up the local APIC timer, with a timeout of
@@ -930,7 +930,7 @@
 	apic_write_around(APIC_TMICT, clocks/APIC_DIVISOR);
 }
 
-static void setup_APIC_timer(unsigned int clocks)
+static void __init setup_APIC_timer(unsigned int clocks)
 {
 	unsigned long flags;
 
diff -Nru a/arch/ppc64/mm/tlb.c b/arch/ppc64/mm/tlb.c
--- a/arch/ppc64/mm/tlb.c	2005-02-28 17:08:32 -08:00
+++ b/arch/ppc64/mm/tlb.c	2005-02-28 17:08:32 -08:00
@@ -85,8 +85,12 @@
 
 	ptepage = virt_to_page(ptep);
 	mm = (struct mm_struct *) ptepage->mapping;
-	addr = ptepage->index +
-		(((unsigned long)ptep & ~PAGE_MASK) * PTRS_PER_PTE);
+	addr = ptepage->index;
+	if (pte_huge(pte))
+		addr +=  ((unsigned long)ptep & ~PAGE_MASK)
+			/ sizeof(*ptep) * HPAGE_SIZE;
+	else
+		addr += ((unsigned long)ptep & ~PAGE_MASK) * PTRS_PER_PTE;
 
 	if (REGION_ID(addr) == USER_REGION_ID)
 		context = mm->context.id;
diff -Nru a/arch/x86_64/mm/srat.c b/arch/x86_64/mm/srat.c
--- a/arch/x86_64/mm/srat.c	2005-02-28 17:08:32 -08:00
+++ b/arch/x86_64/mm/srat.c	2005-02-28 17:08:32 -08:00
@@ -23,7 +23,7 @@
 static nodemask_t nodes_parsed __initdata;
 static nodemask_t nodes_found __initdata;
 static struct node nodes[MAX_NUMNODES] __initdata;
-static __u8  pxm2node[256] __initdata = { [0 ... 255] = 0xff };
+static __u8  pxm2node[256] = { [0 ... 255] = 0xff };
 
 static __init int setup_node(int pxm)
 {
diff -Nru a/drivers/block/cfq-iosched.c b/drivers/block/cfq-iosched.c
--- a/drivers/block/cfq-iosched.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/block/cfq-iosched.c	2005-02-28 17:08:32 -08:00
@@ -1819,7 +1819,7 @@
 	.elevator_owner =	THIS_MODULE,
 };
 
-int cfq_init(void)
+static int __init cfq_init(void)
 {
 	int ret;
 
diff -Nru a/drivers/char/keyboard.c b/drivers/char/keyboard.c
--- a/drivers/char/keyboard.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/char/keyboard.c	2005-02-28 17:08:32 -08:00
@@ -198,6 +198,8 @@
 
 	if (scancode < 0 || scancode >= dev->keycodemax)
 		return -EINVAL;
+	if (keycode < 0 || keycode > KEY_MAX)
+		return -EINVAL;
 
 	oldkey = SET_INPUT_KEYCODE(dev, scancode, keycode);
 
diff -Nru a/drivers/char/pty.c b/drivers/char/pty.c
--- a/drivers/char/pty.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/char/pty.c	2005-02-28 17:08:32 -08:00
@@ -149,13 +149,15 @@
 static int pty_chars_in_buffer(struct tty_struct *tty)
 {
 	struct tty_struct *to = tty->link;
+	ssize_t (*chars_in_buffer)(struct tty_struct *);
 	int count;
 
-	if (!to || !to->ldisc.chars_in_buffer)
+	/* We should get the line discipline lock for "tty->link" */
+	if (!to || !(chars_in_buffer = to->ldisc.chars_in_buffer))
 		return 0;
 
 	/* The ldisc must report 0 if no characters available to be read */
-	count = to->ldisc.chars_in_buffer(to);
+	count = chars_in_buffer(to);
 
 	if (tty->driver->subtype == PTY_TYPE_SLAVE) return count;
 
diff -Nru a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
--- a/drivers/ide/ide-disk.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/ide/ide-disk.c	2005-02-28 17:08:32 -08:00
@@ -119,9 +119,8 @@
 /*
  * __ide_do_rw_disk() issues READ and WRITE commands to a disk,
  * using LBA if supported, or CHS otherwise, to address sectors.
- * It also takes care of issuing special DRIVE_CMDs.
  */
-ide_startstop_t __ide_do_rw_disk (ide_drive_t *drive, struct request *rq, sector_t block)
+static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, sector_t block)
 {
 	ide_hwif_t *hwif	= HWIF(drive);
 	unsigned int dma	= drive->using_dma;
@@ -256,7 +255,6 @@
 		return pre_task_out_intr(drive, rq);
 	}
 }
-EXPORT_SYMBOL_GPL(__ide_do_rw_disk);
 
 /*
  * 268435455  == 137439 MB or 28bit limit
@@ -281,9 +279,9 @@
 		 block, rq->nr_sectors, (unsigned long)rq->buffer);
 
 	if (hwif->rw_disk)
-		return hwif->rw_disk(drive, rq, block);
-	else
-		return __ide_do_rw_disk(drive, rq, block);
+		hwif->rw_disk(drive, rq);
+
+	return __ide_do_rw_disk(drive, rq, block);
 }
 
 /*
diff -Nru a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
--- a/drivers/ide/ide-io.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/ide/ide-io.c	2005-02-28 17:08:32 -08:00
@@ -1163,14 +1163,14 @@
 		 * happens anyway when any interrupt comes in, IDE or otherwise
 		 *  -- the kernel masks the IRQ while it is being handled.
 		 */
-		if (hwif->irq != masked_irq)
+		if (masked_irq != IDE_NO_IRQ && hwif->irq != masked_irq)
 			disable_irq_nosync(hwif->irq);
 		spin_unlock(&ide_lock);
 		local_irq_enable();
 			/* allow other IRQs while we start this request */
 		startstop = start_request(drive, rq);
 		spin_lock_irq(&ide_lock);
-		if (hwif->irq != masked_irq)
+		if (masked_irq != IDE_NO_IRQ && hwif->irq != masked_irq)
 			enable_irq(hwif->irq);
 		if (startstop == ide_stopped)
 			hwgroup->busy = 0;
diff -Nru a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c
--- a/drivers/ide/pci/hpt366.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/ide/pci/hpt366.c	2005-02-28 17:08:32 -08:00
@@ -1018,32 +1018,25 @@
 }
 
 /**
- *	hpt372n_rw_disk		-	wrapper for I/O
+ *	hpt372n_rw_disk		-	prepare for I/O
  *	@drive: drive for command
  *	@rq: block request structure
- *	@block: block number
- *
- *	This is called when a disk I/O is issued to the 372N instead
- *	of the default functionality. We need it because of the clock
- *	switching
  *
+ *	This is called when a disk I/O is issued to the 372N.
+ *	We need it because of the clock switching.
  */
- 
-static ide_startstop_t hpt372n_rw_disk(ide_drive_t *drive, struct request *rq, sector_t block)
+
+static void hpt372n_rw_disk(ide_drive_t *drive, struct request *rq)
 {
+	ide_hwif_t *hwif = drive->hwif;
 	int wantclock;
-	
-	if(rq_data_dir(rq) == READ)
-		wantclock = 0x21;
-	else
-		wantclock = 0x23;
-		
-	if(HWIF(drive)->config_data != wantclock)
-	{
+
+	wantclock = rq_data_dir(rq) ? 0x23 : 0x21;
+
+	if (hwif->config_data != wantclock) {
 		hpt372n_set_clock(drive, wantclock);
-		HWIF(drive)->config_data = wantclock;
+		hwif->config_data = wantclock;
 	}
-	return __ide_do_rw_disk(drive, rq, block);
 }
 
 /*
diff -Nru a/drivers/isdn/hisax/icc.c b/drivers/isdn/hisax/icc.c
--- a/drivers/isdn/hisax/icc.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/isdn/hisax/icc.c	2005-02-28 17:08:32 -08:00
@@ -27,7 +27,7 @@
 static char *ICCVer[] __initdata =
 {"2070 A1/A3", "2070 B1", "2070 B2/B3", "2070 V2.4"};
 
-void
+void __init
 ICCVersion(struct IsdnCardState *cs, char *s)
 {
 	int val;
diff -Nru a/drivers/isdn/hisax/icc.h b/drivers/isdn/hisax/icc.h
--- a/drivers/isdn/hisax/icc.h	2005-02-28 17:08:32 -08:00
+++ b/drivers/isdn/hisax/icc.h	2005-02-28 17:08:32 -08:00
@@ -65,7 +65,7 @@
 #define ICC_IND_AIL    0xE
 #define ICC_IND_DC     0xF
 
-extern void ICCVersion(struct IsdnCardState *cs, char *s);
+extern void __init ICCVersion(struct IsdnCardState *cs, char *s);
 extern void initicc(struct IsdnCardState *cs);
 extern void icc_interrupt(struct IsdnCardState *cs, u_char val);
 extern void clear_pending_icc_ints(struct IsdnCardState *cs);
diff -Nru a/drivers/net/hp100.c b/drivers/net/hp100.c
--- a/drivers/net/hp100.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/net/hp100.c	2005-02-28 17:08:32 -08:00
@@ -306,7 +306,7 @@
  * Read board id and convert to string.
  * Effectively same code as decode_eisa_sig
  */
-static __init const char *hp100_read_id(int ioaddr)
+static __devinit const char *hp100_read_id(int ioaddr)
 {
 	int i;
 	static char str[HP100_SIG_LEN];
@@ -429,8 +429,8 @@
 }
 #endif
 
-static int __init hp100_probe1(struct net_device *dev, int ioaddr,
-			       u_char bus, struct pci_dev *pci_dev)
+static int __devinit hp100_probe1(struct net_device *dev, int ioaddr,
+				  u_char bus, struct pci_dev *pci_dev)
 {
 	int i;
 	int err = -ENODEV;
diff -Nru a/drivers/net/rrunner.c b/drivers/net/rrunner.c
--- a/drivers/net/rrunner.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/net/rrunner.c	2005-02-28 17:08:32 -08:00
@@ -62,7 +62,7 @@
 MODULE_DESCRIPTION("Essential RoadRunner HIPPI driver");
 MODULE_LICENSE("GPL");
 
-static char version[] __initdata = "rrunner.c: v0.50 11/11/2002  Jes Sorensen (jes@wildopensource.com)\n";
+static char version[] __devinitdata = "rrunner.c: v0.50 11/11/2002  Jes Sorensen (jes@wildopensource.com)\n";
 
 /*
  * Implementation notes:
diff -Nru a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
--- a/drivers/parport/parport_pc.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/parport/parport_pc.c	2005-02-28 17:08:32 -08:00
@@ -2488,7 +2488,7 @@
 
 /* VIA 8231 support by Pavel Fedin <sonic_amiga@rambler.ru>
    based on VIA 686a support code by Jeff Garzik <jgarzik@pobox.com> */
-static int __initdata parport_init_mode = 0;
+static int __devinitdata parport_init_mode = 0;
 
 /* Data for two known VIA chips */
 static struct parport_pc_via_data via_686a_data __devinitdata = {
diff -Nru a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c
--- a/drivers/scsi/dc395x.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/scsi/dc395x.c	2005-02-28 17:08:32 -08:00
@@ -488,7 +488,7 @@
 	int def;		/* default value */
 	int safe;		/* safe value */
 };
-static struct ParameterData __initdata cfg_data[] = {
+static struct ParameterData __devinitdata cfg_data[] = {
 	{ /* adapter id */
 		CFG_PARAM_UNSET,
 		0,
@@ -573,7 +573,7 @@
  * set_safe_settings - if the use_safe_settings option is set then
  * set all values to the safe and slow values.
  **/
-static void __init set_safe_settings(void)
+static void __devinit set_safe_settings(void)
 {
 	if (use_safe_settings)
 	{
@@ -592,7 +592,7 @@
  * fix_settings - reset any boot parameters which are out of range
  * back to the default values.
  **/
-static void __init fix_settings(void)
+static void __devinit fix_settings(void)
 {
 	int i;
 
@@ -619,7 +619,7 @@
  * Mapping from the eeprom delay index value (index into this array)
  * to the the number of actual seconds that the delay should be for.
  */
-static char __initdata eeprom_index_to_delay_map[] = 
+static char __devinitdata eeprom_index_to_delay_map[] = 
 	{ 1, 3, 5, 10, 16, 30, 60, 120 };
 
 
@@ -629,7 +629,7 @@
  *
  * @eeprom: The eeprom structure in which we find the delay index to map.
  **/
-static void __init eeprom_index_to_delay(struct NvRamType *eeprom)
+static void __devinit eeprom_index_to_delay(struct NvRamType *eeprom)
 {
 	eeprom->delay_time = eeprom_index_to_delay_map[eeprom->delay_time];
 }
@@ -642,7 +642,7 @@
  *
  * @delay: The delay, in seconds, to find the eeprom index for.
  **/
-static int __init delay_to_eeprom_index(int delay)
+static int __devinit delay_to_eeprom_index(int delay)
 {
 	u8 idx = 0;
 	while (idx < 7 && eeprom_index_to_delay_map[idx] < delay)
@@ -658,7 +658,7 @@
  *
  * @eeprom: The eeprom data to override with command line options.
  **/
-static void __init eeprom_override(struct NvRamType *eeprom)
+static void __devinit eeprom_override(struct NvRamType *eeprom)
 {
 	u8 id;
 
@@ -3931,7 +3931,7 @@
  *
  * @io_port: base I/O address
  **/
-static void __init trms1040_wait_30us(unsigned long io_port)
+static void __devinit trms1040_wait_30us(unsigned long io_port)
 {
 	/* ScsiPortStallExecution(30); wait 30 us */
 	outb(5, io_port + TRM_S1040_GEN_TIMER);
@@ -3948,7 +3948,7 @@
  * @cmd:	SB + op code (command) to send
  * @addr:	address to send
  **/
-static void __init trms1040_write_cmd(unsigned long io_port, u8 cmd, u8 addr)
+static void __devinit trms1040_write_cmd(unsigned long io_port, u8 cmd, u8 addr)
 {
 	int i;
 	u8 send_data;
@@ -3993,7 +3993,7 @@
  * @addr:	offset into EEPROM
  * @byte:	bytes to write
  **/
-static void __init trms1040_set_data(unsigned long io_port, u8 addr, u8 byte)
+static void __devinit trms1040_set_data(unsigned long io_port, u8 addr, u8 byte)
 {
 	int i;
 	u8 send_data;
@@ -4047,7 +4047,7 @@
  * @eeprom:	the data to write
  * @io_port:	the base io port
  **/
-static void __init trms1040_write_all(struct NvRamType *eeprom, unsigned long io_port)
+static void __devinit trms1040_write_all(struct NvRamType *eeprom, unsigned long io_port)
 {
 	u8 *b_eeprom = (u8 *)eeprom;
 	u8 addr;
@@ -4087,7 +4087,7 @@
  *
  * Returns the the byte read.
  **/
-static u8 __init trms1040_get_data(unsigned long io_port, u8 addr)
+static u8 __devinit trms1040_get_data(unsigned long io_port, u8 addr)
 {
 	int i;
 	u8 read_byte;
@@ -4125,7 +4125,7 @@
  * @eeprom:	where to store the data
  * @io_port:	the base io port
  **/
-static void __init trms1040_read_all(struct NvRamType *eeprom, unsigned long io_port)
+static void __devinit trms1040_read_all(struct NvRamType *eeprom, unsigned long io_port)
 {
 	u8 *b_eeprom = (u8 *)eeprom;
 	u8 addr;
@@ -4155,7 +4155,7 @@
  * @eeprom:	caller allocated strcuture to read the eeprom data into
  * @io_port:	io port to read from
  **/
-static void __init check_eeprom(struct NvRamType *eeprom, unsigned long io_port)
+static void __devinit check_eeprom(struct NvRamType *eeprom, unsigned long io_port)
 {
 	u16 *w_eeprom = (u16 *)eeprom;
 	u16 w_addr;
@@ -4225,7 +4225,7 @@
  *
  * @eeprom: The eeprom data strucutre to show details for.
  **/
-static void __init print_eeprom_settings(struct NvRamType *eeprom)
+static void __devinit print_eeprom_settings(struct NvRamType *eeprom)
 {
 	dprintkl(KERN_INFO, "Used settings: AdapterID=%02i, Speed=%i(%02i.%01iMHz), dev_mode=0x%02x\n",
 		eeprom->scsi_id,
@@ -4254,7 +4254,7 @@
 /*
  * Allocate SG tables; as we have to pci_map them, an SG list (struct SGentry*)
  * should never cross a page boundary */
-static int __init adapter_sg_tables_alloc(struct AdapterCtlBlk *acb)
+static int __devinit adapter_sg_tables_alloc(struct AdapterCtlBlk *acb)
 {
 	const unsigned mem_needed = (DC395x_MAX_SRB_CNT+1)
 	                            *SEGMENTX_LEN;
@@ -4300,7 +4300,7 @@
  *
  * @acb: The adapter to print the information for.
  **/
-static void __init adapter_print_config(struct AdapterCtlBlk *acb)
+static void __devinit adapter_print_config(struct AdapterCtlBlk *acb)
 {
 	u8 bval;
 
@@ -4344,7 +4344,7 @@
  *
  * @acb: The adapter to initialize.
  **/
-static void __init adapter_init_params(struct AdapterCtlBlk *acb)
+static void __devinit adapter_init_params(struct AdapterCtlBlk *acb)
 {
 	struct NvRamType *eeprom = &acb->eeprom;
 	int i;
@@ -4406,7 +4406,7 @@
  *
  * @host: The scsi host instance to fill in the values for.
  **/
-static void __init adapter_init_scsi_host(struct Scsi_Host *host)
+static void __devinit adapter_init_scsi_host(struct Scsi_Host *host)
 {
         struct AdapterCtlBlk *acb = (struct AdapterCtlBlk *)host->hostdata;
 	struct NvRamType *eeprom = &acb->eeprom;
@@ -4447,7 +4447,7 @@
  *
  * @acb: The adapter which we are to init.
  **/
-static void __init adapter_init_chip(struct AdapterCtlBlk *acb)
+static void __devinit adapter_init_chip(struct AdapterCtlBlk *acb)
 {
         struct NvRamType *eeprom = &acb->eeprom;
         
@@ -4500,7 +4500,7 @@
  * Returns 0 if the initialization succeeds, any other value on
  * failure.
  **/
-static int __init adapter_init(struct AdapterCtlBlk *acb,
+static int __devinit adapter_init(struct AdapterCtlBlk *acb,
 	unsigned long io_port, u32 io_port_len, unsigned int irq)
 {
 	if (!request_region(io_port, io_port_len, DC395X_NAME)) {
diff -Nru a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
--- a/drivers/scsi/scsi_devinfo.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/scsi/scsi_devinfo.c	2005-02-28 17:08:32 -08:00
@@ -28,7 +28,7 @@
 static const char spaces[] = "                "; /* 16 of them */
 static unsigned scsi_default_dev_flags;
 static LIST_HEAD(scsi_dev_info_list);
-static __initdata char scsi_dev_flags[256];
+static char scsi_dev_flags[256];
 
 /*
  * scsi_static_device_list: deprecated list of devices that require
diff -Nru a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
--- a/drivers/usb/class/cdc-acm.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/usb/class/cdc-acm.c	2005-02-28 17:08:32 -08:00
@@ -278,15 +278,14 @@
 
 
 
-	if (acm->used) {
+	if (acm->used++) {
 		goto done;
         }
 
 	acm->ctrlurb->dev = acm->dev;
 	if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
 		dbg("usb_submit_urb(ctrl irq) failed");
-		rv = -EIO;
-		goto err_out;
+		goto bail_out;
 	}
 
 	acm->readurb->dev = acm->dev;
@@ -303,7 +302,6 @@
 	tty->low_latency = 1;
 
 done:
-	acm->used++;
 err_out:
 	up(&open_sem);
 	return rv;
@@ -312,6 +310,8 @@
 	usb_kill_urb(acm->readurb);
 bail_out_and_unlink:
 	usb_kill_urb(acm->ctrlurb);
+bail_out:
+	acm->used--;
 	up(&open_sem);
 	return -EIO;
 }
diff -Nru a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
--- a/drivers/usb/core/devio.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/usb/core/devio.c	2005-02-28 17:08:32 -08:00
@@ -841,7 +841,7 @@
 		if ((ret = checkintf(ps, ifnum)))
 			return ret;
 	}
-	if ((uurb.endpoint & ~USB_ENDPOINT_DIR_MASK) != 0)
+	if ((uurb.endpoint & USB_ENDPOINT_DIR_MASK) != 0)
 		ep = ps->dev->ep_in [uurb.endpoint & USB_ENDPOINT_NUMBER_MASK];
 	else
 		ep = ps->dev->ep_out [uurb.endpoint & USB_ENDPOINT_NUMBER_MASK];
diff -Nru a/drivers/video/modedb.c b/drivers/video/modedb.c
--- a/drivers/video/modedb.c	2005-02-28 17:08:32 -08:00
+++ b/drivers/video/modedb.c	2005-02-28 17:08:32 -08:00
@@ -37,7 +37,7 @@
 
 #define DEFAULT_MODEDB_INDEX	0
 
-static const __init struct fb_videomode modedb[] = {
+static const struct fb_videomode modedb[] = {
     {
 	/* 640x400 @ 70 Hz, 31.5 kHz hsync */
 	NULL, 70, 640, 400, 39721, 40, 24, 39, 9, 96, 2,
diff -Nru a/fs/binfmt_elf.c b/fs/binfmt_elf.c
--- a/fs/binfmt_elf.c	2005-02-28 17:08:32 -08:00
+++ b/fs/binfmt_elf.c	2005-02-28 17:08:32 -08:00
@@ -803,13 +803,14 @@
 				nbyte = ELF_MIN_ALIGN - nbyte;
 				if (nbyte > elf_brk - elf_bss)
 					nbyte = elf_brk - elf_bss;
-				/*
-				 * This bss-zeroing can fail if the ELF file
-				 * specifies odd protections.  So we don't check
-				 * the return value
-				 */
-				(void)clear_user((void __user *)elf_bss +
-							load_bias, nbyte);
+				if (clear_user((void __user *)elf_bss +
+							load_bias, nbyte)) {
+					/*
+					 * This bss-zeroing can fail if the ELF
+					 * file specifies odd protections.  So
+					 * we don't check the return value
+					 */
+				}
 			}
 		}
 
diff -Nru a/fs/pipe.c b/fs/pipe.c
--- a/fs/pipe.c	2005-02-28 17:08:32 -08:00
+++ b/fs/pipe.c	2005-02-28 17:08:32 -08:00
@@ -235,6 +235,12 @@
 	down(PIPE_SEM(*inode));
 	info = inode->i_pipe;
 
+	if (!PIPE_READERS(*inode)) {
+		send_sig(SIGPIPE, current, 0);
+		ret = -EPIPE;
+		goto out;
+	}
+
 	/* We try to merge small writes */
 	if (info->nrbufs && total_len < PAGE_SIZE) {
 		int lastbuf = (info->curbuf + info->nrbufs - 1) & (PIPE_BUFFERS-1);
@@ -398,13 +404,18 @@
 
 	/* Reading only -- no need for acquiring the semaphore.  */
 	nrbufs = info->nrbufs;
-	mask = (nrbufs > 0) ? POLLIN | POLLRDNORM : 0;
-	mask |= (nrbufs < PIPE_BUFFERS) ? POLLOUT | POLLWRNORM : 0;
+	mask = 0;
+	if (filp->f_mode & FMODE_READ) {
+		mask = (nrbufs > 0) ? POLLIN | POLLRDNORM : 0;
+		if (!PIPE_WRITERS(*inode) && filp->f_version != PIPE_WCOUNTER(*inode))
+			mask |= POLLHUP;
+	}
 
-	if (!PIPE_WRITERS(*inode) && filp->f_version != PIPE_WCOUNTER(*inode))
-		mask |= POLLHUP;
-	if (!PIPE_READERS(*inode))
-		mask |= POLLERR;
+	if (filp->f_mode & FMODE_WRITE) {
+		mask |= (nrbufs < PIPE_BUFFERS) ? POLLOUT | POLLWRNORM : 0;
+		if (!PIPE_READERS(*inode))
+			mask |= POLLERR;
+	}
 
 	return mask;
 }
diff -Nru a/include/linux/ide.h b/include/linux/ide.h
--- a/include/linux/ide.h	2005-02-28 17:08:32 -08:00
+++ b/include/linux/ide.h	2005-02-28 17:08:32 -08:00
@@ -797,7 +797,7 @@
 	struct pci_dev  *pci_dev;	/* for pci chipsets */
 	struct ide_pci_device_s	*cds;	/* chipset device struct */
 
-	ide_startstop_t (*rw_disk)(ide_drive_t *, struct request *, sector_t);
+	void (*rw_disk)(ide_drive_t *, struct request *);
 
 #if 0
 	ide_hwif_ops_t	*hwifops;
@@ -934,9 +934,9 @@
 		/* BOOL: protects all fields below */
 	volatile int busy;
 		/* BOOL: wake us up on timer expiry */
-	int sleeping	: 1;
+	unsigned int sleeping	: 1;
 		/* BOOL: polling active & poll_timeout field valid */
-	int polling	: 1;
+	unsigned int polling	: 1;
 		/* current drive */
 	ide_drive_t *drive;
 		/* ptr to current hwif in linked-list */
@@ -1318,7 +1318,6 @@
 extern int taskfile_lib_get_identify(ide_drive_t *drive, u8 *);
 
 extern int ide_wait_not_busy(ide_hwif_t *hwif, unsigned long timeout);
-ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, sector_t block);
 
 /*
  * ide_stall_queue() can be used by a drive to give excess bandwidth back
diff -Nru a/include/linux/sysctl.h b/include/linux/sysctl.h
--- a/include/linux/sysctl.h	2005-02-28 17:08:32 -08:00
+++ b/include/linux/sysctl.h	2005-02-28 17:08:32 -08:00
@@ -797,6 +797,8 @@
 				 void __user *, size_t *, loff_t *);
 extern int proc_dointvec_userhz_jiffies(ctl_table *, int, struct file *,
 					void __user *, size_t *, loff_t *);
+extern int proc_dointvec_ms_jiffies(ctl_table *, int, struct file *,
+				    void __user *, size_t *, loff_t *);
 extern int proc_doulongvec_minmax(ctl_table *, int, struct file *,
 				  void __user *, size_t *, loff_t *);
 extern int proc_doulongvec_ms_jiffies_minmax(ctl_table *table, int,
@@ -814,6 +816,7 @@
 extern ctl_handler sysctl_string;
 extern ctl_handler sysctl_intvec;
 extern ctl_handler sysctl_jiffies;
+extern ctl_handler sysctl_ms_jiffies;
 
 
 /*
diff -Nru a/include/net/ipv6.h b/include/net/ipv6.h
--- a/include/net/ipv6.h	2005-02-28 17:08:32 -08:00
+++ b/include/net/ipv6.h	2005-02-28 17:08:32 -08:00
@@ -149,6 +149,8 @@
 
 int snmp6_register_dev(struct inet6_dev *idev);
 int snmp6_unregister_dev(struct inet6_dev *idev);
+int snmp6_alloc_dev(struct inet6_dev *idev);
+int snmp6_free_dev(struct inet6_dev *idev);
 int snmp6_mib_init(void *ptr[2], size_t mibsize, size_t mibalign);
 void snmp6_mib_free(void *ptr[2]);
 
diff -Nru a/kernel/sysctl.c b/kernel/sysctl.c
--- a/kernel/sysctl.c	2005-02-28 17:08:32 -08:00
+++ b/kernel/sysctl.c	2005-02-28 17:08:32 -08:00
@@ -1902,6 +1902,27 @@
 	return 0;
 }
 
+static int do_proc_dointvec_ms_jiffies_conv(int *negp, unsigned long *lvalp,
+					    int *valp,
+					    int write, void *data)
+{
+	if (write) {
+		*valp = msecs_to_jiffies(*negp ? -*lvalp : *lvalp);
+	} else {
+		int val = *valp;
+		unsigned long lval;
+		if (val < 0) {
+			*negp = -1;
+			lval = (unsigned long)-val;
+		} else {
+			*negp = 0;
+			lval = (unsigned long)val;
+		}
+		*lvalp = jiffies_to_msecs(lval);
+	}
+	return 0;
+}
+
 /**
  * proc_dointvec_jiffies - read a vector of integers as seconds
  * @table: the sysctl table
@@ -1946,6 +1967,28 @@
 		    	    do_proc_dointvec_userhz_jiffies_conv,NULL);
 }
 
+/**
+ * proc_dointvec_ms_jiffies - read a vector of integers as 1 milliseconds
+ * @table: the sysctl table
+ * @write: %TRUE if this is a write to the sysctl file
+ * @filp: the file structure
+ * @buffer: the user buffer
+ * @lenp: the size of the user buffer
+ *
+ * Reads/writes up to table->maxlen/sizeof(unsigned int) integer
+ * values from/to the user buffer, treated as an ASCII string. 
+ * The values read are assumed to be in 1/1000 seconds, and 
+ * are converted into jiffies.
+ *
+ * Returns 0 on success.
+ */
+int proc_dointvec_ms_jiffies(ctl_table *table, int write, struct file *filp,
+			     void __user *buffer, size_t *lenp, loff_t *ppos)
+{
+	return do_proc_dointvec(table, write, filp, buffer, lenp, ppos,
+				do_proc_dointvec_ms_jiffies_conv, NULL);
+}
+
 #else /* CONFIG_PROC_FS */
 
 int proc_dostring(ctl_table *table, int write, struct file *filp,
@@ -1990,6 +2033,12 @@
 	return -ENOSYS;
 }
 
+int proc_dointvec_ms_jiffies(ctl_table *table, int write, struct file *filp,
+			     void __user *buffer, size_t *lenp, loff_t *ppos)
+{
+	return -ENOSYS;
+}
+
 int proc_doulongvec_minmax(ctl_table *table, int write, struct file *filp,
 		    void __user *buffer, size_t *lenp, loff_t *ppos)
 {
@@ -2119,6 +2168,33 @@
 	return 1;
 }
 
+/* Strategy function to convert jiffies to seconds */ 
+int sysctl_ms_jiffies(ctl_table *table, int __user *name, int nlen,
+		void __user *oldval, size_t __user *oldlenp,
+		void __user *newval, size_t newlen, void **context)
+{
+	if (oldval) {
+		size_t olen;
+		if (oldlenp) { 
+			if (get_user(olen, oldlenp))
+				return -EFAULT;
+			if (olen!=sizeof(int))
+				return -EINVAL; 
+		}
+		if (put_user(jiffies_to_msecs(*(int *)(table->data)), (int __user *)oldval) ||
+		    (oldlenp && put_user(sizeof(int),oldlenp)))
+			return -EFAULT;
+	}
+	if (newval && newlen) { 
+		int new;
+		if (newlen != sizeof(int))
+			return -EINVAL; 
+		if (get_user(new, (int __user *)newval))
+			return -EFAULT;
+		*(int *)(table->data) = msecs_to_jiffies(new);
+	}
+	return 1;
+}
 
 #else /* CONFIG_SYSCTL */
 
@@ -2149,6 +2225,13 @@
 	return -ENOSYS;
 }
 
+int sysctl_ms_jiffies(ctl_table *table, int __user *name, int nlen,
+		void __user *oldval, size_t __user *oldlenp,
+		void __user *newval, size_t newlen, void **context)
+{
+	return -ENOSYS;
+}
+
 int proc_dostring(ctl_table *table, int write, struct file *filp,
 		  void __user *buffer, size_t *lenp, loff_t *ppos)
 {
@@ -2185,6 +2268,12 @@
 	return -ENOSYS;
 }
 
+int proc_dointvec_ms_jiffies(ctl_table *table, int write, struct file *filp,
+			     void __user *buffer, size_t *lenp, loff_t *ppos)
+{
+	return -ENOSYS;
+}
+
 int proc_doulongvec_minmax(ctl_table *table, int write, struct file *filp,
 		    void __user *buffer, size_t *lenp, loff_t *ppos)
 {
@@ -2219,11 +2308,13 @@
 EXPORT_SYMBOL(proc_dointvec_jiffies);
 EXPORT_SYMBOL(proc_dointvec_minmax);
 EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
+EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
 EXPORT_SYMBOL(proc_dostring);
 EXPORT_SYMBOL(proc_doulongvec_minmax);
 EXPORT_SYMBOL(proc_doulongvec_ms_jiffies_minmax);
 EXPORT_SYMBOL(register_sysctl_table);
 EXPORT_SYMBOL(sysctl_intvec);
 EXPORT_SYMBOL(sysctl_jiffies);
+EXPORT_SYMBOL(sysctl_ms_jiffies);
 EXPORT_SYMBOL(sysctl_string);
 EXPORT_SYMBOL(unregister_sysctl_table);
diff -Nru a/mm/highmem.c b/mm/highmem.c
--- a/mm/highmem.c	2005-02-28 17:08:32 -08:00
+++ b/mm/highmem.c	2005-02-28 17:08:32 -08:00
@@ -425,7 +425,7 @@
 	 * at least one page was bounced, fill in possible non-highmem
 	 * pages
 	 */
-	bio_for_each_segment(from, *bio_orig, i) {
+	__bio_for_each_segment(from, *bio_orig, i, 0) {
 		to = bio_iovec_idx(bio, i);
 		if (!to->bv_page) {
 			to->bv_page = from->bv_page;
diff -Nru a/net/core/pktgen.c b/net/core/pktgen.c
--- a/net/core/pktgen.c	2005-02-28 17:08:32 -08:00
+++ b/net/core/pktgen.c	2005-02-28 17:08:32 -08:00
@@ -104,6 +104,8 @@
  * Corrections from Nikolai Malykh (nmalykh@bilim.com) 
  * Removed unused flags F_SET_SRCMAC & F_SET_SRCIP 041230
  *
+ * interruptible_sleep_on_timeout() replaced Nishanth Aravamudan <nacc@us.ibm.com> 
+ * 050103
  */
 #include <linux/sys.h>
 #include <linux/types.h>
@@ -135,6 +137,7 @@
 #include <linux/ipv6.h>
 #include <linux/udp.h>
 #include <linux/proc_fs.h>
+#include <linux/wait.h>
 #include <net/checksum.h>
 #include <net/ipv6.h>
 #include <net/addrconf.h>
@@ -148,7 +151,7 @@
 #include <asm/timex.h>
 
 
-#define VERSION  "pktgen v2.56: Packet Generator for packet performance testing.\n"
+#define VERSION  "pktgen v2.58: Packet Generator for packet performance testing.\n"
 
 /* #define PG_DEBUG(a) a */
 #define PG_DEBUG(a) 
@@ -808,6 +811,7 @@
         struct pktgen_dev *pkt_dev = (struct pktgen_dev*)(data);
         char* pg_result = NULL;
         int tmp = 0;
+	char buf[128];
         
         pg_result = &(pkt_dev->result[0]);
         
@@ -1068,7 +1072,6 @@
 		return count;
 	}
 	if (!strcmp(name, "dst_min") || !strcmp(name, "dst")) {
-                char buf[IP_NAME_SZ];
 		len = strn_len(&user_buffer[i], sizeof(pkt_dev->dst_min) - 1);
                 if (len < 0) { return len; }
 
@@ -1088,7 +1091,6 @@
 		return count;
 	}
 	if (!strcmp(name, "dst_max")) {
-                char buf[IP_NAME_SZ];
 		len = strn_len(&user_buffer[i], sizeof(pkt_dev->dst_max) - 1);
                 if (len < 0) { return len; }
 
@@ -1109,9 +1111,7 @@
 		return count;
 	}
 	if (!strcmp(name, "dst6")) {
-                char buf[128];
-
-		len = strn_len(&user_buffer[i], 128 - 1);
+		len = strn_len(&user_buffer[i], sizeof(buf) - 1);
                 if (len < 0) return len; 
 
 		pkt_dev->flags |= F_IPV6;
@@ -1133,9 +1133,7 @@
 		return count;
 	}
 	if (!strcmp(name, "dst6_min")) {
-                char buf[128];
-
-		len = strn_len(&user_buffer[i], 128 - 1);
+		len = strn_len(&user_buffer[i], sizeof(buf) - 1);
                 if (len < 0) return len; 
 
 		pkt_dev->flags |= F_IPV6;
@@ -1156,9 +1154,7 @@
 		return count;
 	}
 	if (!strcmp(name, "dst6_max")) {
-                char buf[128];
-
-		len = strn_len(&user_buffer[i], 128 - 1);
+		len = strn_len(&user_buffer[i], sizeof(buf) - 1);
                 if (len < 0) return len; 
 
 		pkt_dev->flags |= F_IPV6;
@@ -1178,9 +1174,7 @@
 		return count;
 	}
 	if (!strcmp(name, "src6")) {
-                char buf[128];
-
-		len = strn_len(&user_buffer[i], 128 - 1);
+		len = strn_len(&user_buffer[i], sizeof(buf) - 1);
                 if (len < 0) return len; 
 
 		pkt_dev->flags |= F_IPV6;
@@ -1202,7 +1196,6 @@
 		return count;
 	}
 	if (!strcmp(name, "src_min")) {
-                char buf[IP_NAME_SZ];
 		len = strn_len(&user_buffer[i], sizeof(pkt_dev->src_min) - 1);
                 if (len < 0) { return len; }
                 if (copy_from_user(buf, &user_buffer[i], len))
@@ -1221,7 +1214,6 @@
 		return count;
 	}
 	if (!strcmp(name, "src_max")) {
-                char buf[IP_NAME_SZ];
 		len = strn_len(&user_buffer[i], sizeof(pkt_dev->src_max) - 1);
                 if (len < 0) { return len; }
                 if (copy_from_user(buf, &user_buffer[i], len))
@@ -2402,16 +2394,14 @@
 
 static int pktgen_wait_thread_run(struct pktgen_thread *t )
 {
-        wait_queue_head_t queue;
-        
-        init_waitqueue_head(&queue);
-        
         if_lock(t);
 
         while(thread_is_running(t)) {
+
                 if_unlock(t);
-        
-                interruptible_sleep_on_timeout(&queue, HZ/10);
+
+		msleep_interruptible(100); 
+
                 if (signal_pending(current)) 
                         goto signal;
                 if_lock(t);
@@ -2738,6 +2728,7 @@
 
 static void pktgen_thread_worker(struct pktgen_thread *t) 
 {
+	DEFINE_WAIT(wait);
         struct pktgen_dev *pkt_dev = NULL;
 	int cpu = t->cpu;
 	sigset_t tmpsig;
@@ -2805,9 +2796,11 @@
 					do_softirq();
 				tx_since_softirq = 0;
 			}
+		} else {
+			prepare_to_wait(&(t->queue), &wait, TASK_INTERRUPTIBLE);
+			schedule_timeout(HZ/10);
+			finish_wait(&(t->queue), &wait);
 		}
-                else 
-                        interruptible_sleep_on_timeout(&(t->queue), HZ/10);
 
                 /* 
 		 * Back from sleep, either due to the timeout or signal.
@@ -3117,8 +3110,7 @@
                 struct pktgen_thread *t = pktgen_threads;
                 pktgen_threads->control |= (T_TERMINATE);
 
-                while( t == pktgen_threads) 
-                        interruptible_sleep_on_timeout(&queue, HZ);
+		wait_event_interruptible_timeout(queue, (t != pktgen_threads), HZ);
         }
 
         /* Un-register us from receiving netdevice events */
diff -Nru a/net/ipv4/fib_hash.c b/net/ipv4/fib_hash.c
--- a/net/ipv4/fib_hash.c	2005-02-28 17:08:32 -08:00
+++ b/net/ipv4/fib_hash.c	2005-02-28 17:08:32 -08:00
@@ -684,7 +684,7 @@
 
 		list_for_each_entry(fa, &f->fn_alias, fa_list) {
 			if (i < s_i)
-				continue;
+				goto next;
 
 			if (fib_dump_info(skb, NETLINK_CB(cb->skb).pid,
 					  cb->nlh->nlmsg_seq,
@@ -699,7 +699,7 @@
 				cb->args[3] = i;
 				return -1;
 			}
-
+		next:
 			i++;
 		}
 	}
diff -Nru a/net/ipv4/netfilter/ip_conntrack_standalone.c b/net/ipv4/netfilter/ip_conntrack_standalone.c
--- a/net/ipv4/netfilter/ip_conntrack_standalone.c	2005-02-28 17:08:32 -08:00
+++ b/net/ipv4/netfilter/ip_conntrack_standalone.c	2005-02-28 17:08:32 -08:00
@@ -384,10 +384,12 @@
 				        const struct net_device *out,
 				        int (*okfn)(struct sk_buff *))
 {
+#if !defined(CONFIG_IP_NF_NAT) && !defined(CONFIG_IP_NF_NAT_MODULE)
 	/* Previously seen (loopback)?  Ignore.  Do this before
            fragment check. */
 	if ((*pskb)->nfct)
 		return NF_ACCEPT;
+#endif
 
 	/* Gather fragments. */
 	if ((*pskb)->nh.iph->frag_off & htons(IP_MF|IP_OFFSET)) {
diff -Nru a/net/ipv4/netfilter/ipt_hashlimit.c b/net/ipv4/netfilter/ipt_hashlimit.c
--- a/net/ipv4/netfilter/ipt_hashlimit.c	2005-02-28 17:08:32 -08:00
+++ b/net/ipv4/netfilter/ipt_hashlimit.c	2005-02-28 17:08:32 -08:00
@@ -98,6 +98,7 @@
 };
 
 static DECLARE_RWLOCK(hashlimit_lock);	/* protects htables list */
+static DECLARE_MUTEX(hlimit_mutex);	/* additional checkentry protection */
 static LIST_HEAD(hashlimit_htables);
 static kmem_cache_t *hashlimit_cachep;
 
@@ -531,10 +532,19 @@
 	if (!r->cfg.expire)
 		return 0;
 
+	/* This is the best we've got: We cannot release and re-grab lock,
+	 * since checkentry() is called before ip_tables.c grabs ipt_mutex.  
+	 * We also cannot grab the hashtable spinlock, since htable_create will 
+	 * call vmalloc, and that can sleep.  And we cannot just re-search
+	 * the list of htable's in htable_create(), since then we would
+	 * create duplicate proc files. -HW */
+	down(&hlimit_mutex);
 	r->hinfo = htable_find_get(r->name);
 	if (!r->hinfo && (htable_create(r) != 0)) {
+		up(&hlimit_mutex);
 		return 0;
 	}
+	up(&hlimit_mutex);
 
 	/* Ugly hack: For SMP, we only want to use one set */
 	r->u.master = r;
diff -Nru a/net/ipv4/route.c b/net/ipv4/route.c
--- a/net/ipv4/route.c	2005-02-28 17:08:32 -08:00
+++ b/net/ipv4/route.c	2005-02-28 17:08:32 -08:00
@@ -2545,10 +2545,10 @@
 		.ctl_name	= NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS,
 		.procname	= "gc_min_interval_ms",
 		.data		= &ip_rt_gc_min_interval,
-		.maxlen		= sizeof(unsigned long),
+		.maxlen		= sizeof(int),
 		.mode		= 0644,
-		.proc_handler	= &proc_doulongvec_ms_jiffies_minmax,
-		.strategy	= &sysctl_jiffies,
+		.proc_handler	= &proc_dointvec_ms_jiffies,
+		.strategy	= &sysctl_ms_jiffies,
 	},
 	{
 		.ctl_name	= NET_IPV4_ROUTE_GC_TIMEOUT,
diff -Nru a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
--- a/net/ipv6/addrconf.c	2005-02-28 17:08:32 -08:00
+++ b/net/ipv6/addrconf.c	2005-02-28 17:08:32 -08:00
@@ -308,7 +308,7 @@
 		printk("Freeing alive inet6 device %p\n", idev);
 		return;
 	}
-	snmp6_unregister_dev(idev);
+	snmp6_free_dev(idev);
 	kfree(idev);
 }
 
@@ -339,6 +339,16 @@
 		/* We refer to the device */
 		dev_hold(dev);
 
+		if (snmp6_alloc_dev(ndev) < 0) {
+			ADBG((KERN_WARNING
+				"%s(): cannot allocate memory for statistics; dev=%s.\n",
+				__FUNCTION__, dev->name));
+			neigh_parms_release(&nd_tbl, ndev->nd_parms);
+			ndev->dead = 1;
+			in6_dev_finish_destroy(ndev);
+			return NULL;
+		}
+
 		if (snmp6_register_dev(ndev) < 0) {
 			ADBG((KERN_WARNING
 				"%s(): cannot create /proc/net/dev_snmp6/%s\n",
@@ -2013,6 +2023,10 @@
 		dev->ip6_ptr = NULL;
 		idev->dead = 1;
 		write_unlock_bh(&addrconf_lock);
+
+		/* Step 1.5: remove snmp6 entry */
+		snmp6_unregister_dev(idev);
+
 	}
 
 	/* Step 2: clear hash table */
diff -Nru a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
--- a/net/ipv6/af_inet6.c	2005-02-28 17:08:32 -08:00
+++ b/net/ipv6/af_inet6.c	2005-02-28 17:08:32 -08:00
@@ -652,8 +652,10 @@
 {
 	if (ptr == NULL)
 		return;
-	free_percpu(ptr[0]);
-	free_percpu(ptr[1]);
+	if (ptr[0])
+		free_percpu(ptr[0]);
+	if (ptr[1])
+		free_percpu(ptr[1]);
 	ptr[0] = ptr[1] = NULL;
 }
 
diff -Nru a/net/ipv6/proc.c b/net/ipv6/proc.c
--- a/net/ipv6/proc.c	2005-02-28 17:08:32 -08:00
+++ b/net/ipv6/proc.c	2005-02-28 17:08:32 -08:00
@@ -201,33 +201,23 @@
 
 int snmp6_register_dev(struct inet6_dev *idev)
 {
-	int err = -ENOMEM;
 	struct proc_dir_entry *p;
 
 	if (!idev || !idev->dev)
 		return -EINVAL;
 
-	if (snmp6_mib_init((void **)idev->stats.icmpv6, sizeof(struct icmpv6_mib),
-			   __alignof__(struct icmpv6_mib)) < 0)
-		goto err_icmp;
+	if (!proc_net_devsnmp6)
+		return -ENOENT;
 
-	if (!proc_net_devsnmp6) {
-		err = -ENOENT;
-		goto err_proc;
-	}
 	p = create_proc_entry(idev->dev->name, S_IRUGO, proc_net_devsnmp6);
 	if (!p)
-		goto err_proc;
+		return -ENOMEM;
+
 	p->data = idev;
 	p->proc_fops = &snmp6_seq_fops;
 
 	idev->stats.proc_dir_entry = p;
 	return 0;
-
-err_proc:
-	snmp6_mib_free((void **)idev->stats.icmpv6);
-err_icmp:
-	return err;
 }
 
 int snmp6_unregister_dev(struct inet6_dev *idev)
@@ -238,8 +228,6 @@
 		return -EINVAL;
 	remove_proc_entry(idev->stats.proc_dir_entry->name,
 			  proc_net_devsnmp6);
-	snmp6_mib_free((void **)idev->stats.icmpv6);
-
 	return 0;
 }
 
@@ -280,6 +268,17 @@
 
 int snmp6_register_dev(struct inet6_dev *idev)
 {
+	return 0;
+}
+
+int snmp6_unregister_dev(struct inet6_dev *idev)
+{
+	return 0;
+}
+#endif	/* CONFIG_PROC_FS */
+
+int snmp6_alloc_dev(struct inet6_dev *idev)
+{
 	int err = -ENOMEM;
 
 	if (!idev || !idev->dev)
@@ -295,11 +294,10 @@
 	return err;
 }
 
-int snmp6_unregister_dev(struct inet6_dev *idev)
+int snmp6_free_dev(struct inet6_dev *idev)
 {
 	snmp6_mib_free((void **)idev->stats.icmpv6);
 	return 0;
 }
 
-#endif
 
diff -Nru a/net/unix/af_unix.c b/net/unix/af_unix.c
--- a/net/unix/af_unix.c	2005-02-28 17:08:32 -08:00
+++ b/net/unix/af_unix.c	2005-02-28 17:08:32 -08:00
@@ -1850,15 +1850,22 @@
 		case SIOCINQ:
 		{
 			struct sk_buff *skb;
+
 			if (sk->sk_state == TCP_LISTEN) {
 				err = -EINVAL;
 				break;
 			}
 
 			spin_lock(&sk->sk_receive_queue.lock);
-			skb = skb_peek(&sk->sk_receive_queue);
-			if (skb)
-				amount=skb->len;
+			if (sk->sk_type == SOCK_STREAM ||
+			    sk->sk_type == SOCK_SEQPACKET) {
+				skb_queue_walk(&sk->sk_receive_queue, skb)
+					amount += skb->len;
+			} else {
+				skb = skb_peek(&sk->sk_receive_queue);
+				if (skb)
+					amount=skb->len;
+			}
 			spin_unlock(&sk->sk_receive_queue.lock);
 			err = put_user(amount, (int __user *)arg);
 			break;
diff -Nru a/security/keys/compat.c b/security/keys/compat.c
--- a/security/keys/compat.c	2005-02-28 17:08:32 -08:00
+++ b/security/keys/compat.c	2005-02-28 17:08:32 -08:00
@@ -31,7 +31,7 @@
 		return keyctl_get_keyring_ID(arg2, arg3);
 
 	case KEYCTL_JOIN_SESSION_KEYRING:
-		return keyctl_join_session_keyring(compat_ptr(arg3));
+		return keyctl_join_session_keyring(compat_ptr(arg2));
 
 	case KEYCTL_UPDATE:
 		return keyctl_update_key(arg2, compat_ptr(arg3), arg4);
diff -Nru a/security/keys/keyctl.c b/security/keys/keyctl.c
--- a/security/keys/keyctl.c	2005-02-28 17:08:32 -08:00
+++ b/security/keys/keyctl.c	2005-02-28 17:08:32 -08:00
@@ -923,7 +923,7 @@
 					     (int) arg3);
 
 	case KEYCTL_JOIN_SESSION_KEYRING:
-		return keyctl_join_session_keyring((const char __user *) arg3);
+		return keyctl_join_session_keyring((const char __user *) arg2);
 
 	case KEYCTL_UPDATE:
 		return keyctl_update_key((key_serial_t) arg2,
diff -Nru a/sound/oss/aedsp16.c b/sound/oss/aedsp16.c
--- a/sound/oss/aedsp16.c	2005-02-28 17:08:32 -08:00
+++ b/sound/oss/aedsp16.c	2005-02-28 17:08:32 -08:00
@@ -489,7 +489,7 @@
 	{0x00, 0x00}
 };
 
-static struct aedsp16_info ae_config __initdata = {
+static struct aedsp16_info ae_config = {
 	DEF_AEDSP16_IOB,
 	DEF_AEDSP16_IRQ,
 	DEF_AEDSP16_MRQ,
@@ -1155,7 +1155,7 @@
 	return TRUE;
 }
 
-static void __init uninit_aedsp16_sb(void)
+static void uninit_aedsp16_sb(void)
 {
 	DBG(("uninit_aedsp16_sb: "));
 
@@ -1196,7 +1196,7 @@
 	return TRUE;
 }
 
-static void __init uninit_aedsp16_mss(void)
+static void uninit_aedsp16_mss(void)
 {
 	DBG(("uninit_aedsp16_mss: "));
 
@@ -1237,7 +1237,7 @@
 	return TRUE;
 }
 
-static void __init uninit_aedsp16_mpu(void)
+static void uninit_aedsp16_mpu(void)
 {
 	DBG(("uninit_aedsp16_mpu: "));
 
@@ -1294,7 +1294,7 @@
 	return initialized;
 }
 
-static void __init uninit_aedsp16(void)
+static void __exit uninit_aedsp16(void)
 {
 	if (ae_config.mss_base != -1)
 		uninit_aedsp16_mss();
diff -Nru a/sound/oss/opl3sa2.c b/sound/oss/opl3sa2.c
--- a/sound/oss/opl3sa2.c	2005-02-28 17:08:32 -08:00
+++ b/sound/oss/opl3sa2.c	2005-02-28 17:08:32 -08:00
@@ -711,7 +711,7 @@
 }
 
 
-static void __init opl3sa2_clear_slots(struct address_info* hw_config)
+static void opl3sa2_clear_slots(struct address_info* hw_config)
 {
 	int i;
 
diff -Nru a/sound/oss/sonicvibes.c b/sound/oss/sonicvibes.c
--- a/sound/oss/sonicvibes.c	2005-02-28 17:08:32 -08:00
+++ b/sound/oss/sonicvibes.c	2005-02-28 17:08:32 -08:00
@@ -2470,7 +2470,7 @@
 static struct initvol {
 	int mixch;
 	int vol;
-} initvol[] __initdata = {
+} initvol[] __devinitdata = {
 	{ SOUND_MIXER_WRITE_RECLEV, 0x4040 },
 	{ SOUND_MIXER_WRITE_LINE1, 0x4040 },
 	{ SOUND_MIXER_WRITE_CD, 0x4040 },
@@ -2487,7 +2487,7 @@
 
 static int __devinit sv_probe(struct pci_dev *pcidev, const struct pci_device_id *pciid)
 {
-	static char __initdata sv_ddma_name[] = "S3 Inc. SonicVibes DDMA Controller";
+	static char __devinitdata sv_ddma_name[] = "S3 Inc. SonicVibes DDMA Controller";
        	struct sv_state *s;
 	mm_segment_t fs;
 	int i, val, ret;
