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 # Signed-off-by: Jes Sorensen # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # # 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 # # 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 # Signed-off-by: Greg Kroah-Hartman # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Linus Torvalds # # 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 # Signed-off-by: Greg Kroah-Hartman # Signed-off-by: Andrew Morton # Signed-off-by: Linus Torvalds # # 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 for spotting this. # # Signed-Off-By: David Howells # Signed-off-by: Andrew Morton # Signed-off-by: Linus Torvalds # # 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 # # 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 # Acked-by: William Irwin # Signed-off-by: Linus Torvalds # # 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 # # 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 # # 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 # Signed-off-by: Bartlomiej Zolnierkiewicz # # 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 # # 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 # # 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 # Signed-off-by: David S. Miller # # 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 # Signed-off-by: David S. Miller # # ChangeSet # 2005/02/23 19:48:15-08:00 robert.olsson@data.slu.se # [PKTGEN]: Replace interruptible_sleep_on_timeout() # # From Nishanth Aravamudan # # Signed-off-by: David S. Miller # # 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 # Signed-off-by: Herbert Xu # Signed-off-by: David S. Miller # # 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 # Signed-off-by: Herbert Xu # Signed-off-by: David S. Miller # # 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 # Signed-off-by: Herbert Xu # Signed-off-by: David S. Miller # # 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 # Signed-off-by: Herbert Xu # Signed-off-by: David S. Miller # # 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 # Signed-off-by: Herbert Xu # Signed-off-by: David S. Miller # # 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 # Acked-by: Rusty Russel # Signed-off-by: David S. Miller # # 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 # Acked-by: Rusty Russel # Signed-off-by: David S. Miller # # 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 # # 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 # # 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 # # 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 # # 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 # 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 based on VIA 686a support code by Jeff Garzik */ -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 + * 050103 */ #include #include @@ -135,6 +137,7 @@ #include #include #include +#include #include #include #include @@ -148,7 +151,7 @@ #include -#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;