linux-cvs-patches
[Top] [All Lists]

CVS Update@linux-mips.org: linux

To: linux-cvs-patches@linux-mips.org
Subject: CVS Update@linux-mips.org: linux
From: ralf@linux-mips.org
Date: Wed, 02 Mar 2005 19:58:17 +0000
Reply-to: linux-mips@linux-mips.org
Sender: linux-cvs-patches-bounce@linux-mips.org
CVSROOT:        /home/cvs
Module name:    linux
Changes by:     ralf@ftp.linux-mips.org 05/03/02 19:58:04

Modified files:
        .              : CREDITS Makefile 
        arch/arm/kernel: debug.S 
        arch/arm/mach-imx: dma.c generic.c 
        arch/arm/mm    : consistent.c 
        arch/i386/kernel: apic.c 
        arch/ia64/kernel: ptrace.c 
        arch/ppc64/mm  : tlb.c 
        arch/x86_64/mm : srat.c 
        drivers/acpi   : pci_irq.c 
        drivers/block  : cfq-iosched.c genhd.c 
        drivers/char   : keyboard.c pty.c 
        drivers/ide    : ide-disk.c ide-io.c 
        drivers/ide/pci: hpt366.c 
        drivers/input/serio: i8042-x86ia64io.h 
        drivers/isdn/hisax: icc.c icc.h 
        drivers/net    : hp100.c rrunner.c 
        drivers/net/wireless/prism54: islpci_hotplug.c 
        drivers/parport: parport_pc.c 
        drivers/scsi   : dc395x.c scsi_devinfo.c 
        drivers/serial : 8250.c 8250_pci.c Makefile 
        drivers/usb/class: cdc-acm.c 
        drivers/usb/core: devio.c 
        drivers/video  : modedb.c 
        drivers/video/aty: radeon_base.c 
        fs             : binfmt_elf.c pipe.c 
        fs/sysfs       : file.c 
        include/linux  : ide.h pci_ids.h sysctl.h 
        include/net    : ipv6.h 
        kernel         : audit.c auditsc.c sysctl.c 
        mm             : highmem.c 
        net/core       : pktgen.c 
        net/ipv4       : fib_hash.c route.c 
        net/ipv4/netfilter: ip_conntrack_standalone.c ipt_hashlimit.c 
        net/ipv6       : addrconf.c af_inet6.c proc.c 
        net/unix       : af_unix.c 
        security/keys  : compat.c keyctl.c 
        security/selinux/ss: conditional.c policydb.c 
        sound/oss      : aedsp16.c opl3sa2.c sonicvibes.c 

Log message:
        Merge with Linux 2.6.11.

diff -urN linux/CREDITS linux/CREDITS
--- linux/CREDITS       2005/02/13 20:16:13     1.139
+++ linux/CREDITS       2005/03/02 19:58:00     1.140
@@ -805,6 +805,21 @@
 S: Round Rock, TX  78682
 S: USA
 
+N: Ben Dooks
+E: ben-linux@fluff.org
+E: ben@simtec.co.uk
+W: http://www.fluff.org/ben/
+W: http://www.simtec.co.uk/
+D: Samsung S3C2410/S3C2440 support, general ARM support
+D: Maintaining Simtec Electronics development boards
+S: Simtec Electronics
+S: Avondale Drive
+S: Tarleton
+S: Preston
+S: Lancs
+S: PR4 6AX
+S: United Kingdom
+
 N: John G Dorsey
 E: john+@cs.cmu.edu
 D: ARM Linux ports to Assabet/Neponset, Spot
diff -urN linux/Makefile linux/Makefile
--- linux/Makefile      2005/02/28 15:45:09     1.246
+++ linux/Makefile      2005/03/02 19:58:00     1.247
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 11
-EXTRAVERSION =-rc5
+EXTRAVERSION =
 NAME=Woozy Numbat
 
 # *DOCUMENTATION*
diff -urN linux/arch/arm/kernel/debug.S linux/arch/arm/kernel/debug.S
--- linux/arch/arm/kernel/debug.S       2005/02/28 15:45:09     1.17
+++ linux/arch/arm/kernel/debug.S       2005/03/02 19:58:00     1.18
@@ -52,29 +52,6 @@
 #include <asm/arch/debug-macro.S>
 #endif
 
-#if 0
-// #elif defined(CONFIG_ARCH_FTVPCI)
-               .macro  addruart,rx
-               mrc     p15, 0, \rx, c1, c0
-               tst     \rx, #1                 @ MMU enabled?
-               movne   \rx, #0xe0000000
-               moveq   \rx, #0x10000000
-               .endm
-
-               .macro  senduart,rd,rx
-               str     \rd, [\rx, #0xc]
-               .endm
-
-               .macro  busyuart,rd,rx
-1001:          ldr     \rd, [\rx, #0x4]
-               tst     \rd, #1 << 2
-               beq     1001b
-               .endm
-
-               .macro  waituart,rd,rx
-               .endm
-#endif
-
 /*
  * Useful debugging routines
  */
diff -urN linux/arch/arm/mach-imx/dma.c linux/arch/arm/mach-imx/dma.c
--- linux/arch/arm/mach-imx/dma.c       2004/08/24 15:10:03     1.1
+++ linux/arch/arm/mach-imx/dma.c       2005/03/02 19:58:00     1.2
@@ -136,7 +136,7 @@
                               i, channel->name);
                        DBOSR |= (1 << i);
                }
-               DISR |= (1 << i);
+               DISR = (1 << i);
        }
        return IRQ_HANDLED;
 }
@@ -158,10 +158,10 @@
                                 */
                                printk(KERN_WARNING
                                       "spurious IRQ for DMA channel %d\n", i);
-                               DISR |= (1 << i);
                        }
                }
        }
+       DISR = disr;
        return IRQ_HANDLED;
 }
 
diff -urN linux/arch/arm/mach-imx/generic.c linux/arch/arm/mach-imx/generic.c
--- linux/arch/arm/mach-imx/generic.c   2004/08/24 15:10:03     1.1
+++ linux/arch/arm/mach-imx/generic.c   2005/03/02 19:58:00     1.2
@@ -100,8 +100,8 @@
 static unsigned int imx_decode_pll(unsigned int pll)
 {
        u32 mfi = (pll >> 10) & 0xf;
-       u32 mfn = pll & 0x3f;
-       u32 mfd = (pll >> 16) & 0x3f;
+       u32 mfn = pll & 0x3ff;
+       u32 mfd = (pll >> 16) & 0x3ff;
        u32 pd =  (pll >> 26) & 0xf;
        u32 f_ref = (CSCR & CSCR_SYSTEM_SEL) ? 16000000 : (CLK32 * 512);
 
diff -urN linux/arch/arm/mm/consistent.c linux/arch/arm/mm/consistent.c
--- linux/arch/arm/mm/consistent.c      2005/02/28 15:45:10     1.25
+++ linux/arch/arm/mm/consistent.c      2005/03/02 19:58:00     1.26
@@ -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 -urN linux/arch/i386/kernel/apic.c linux/arch/i386/kernel/apic.c
--- linux/arch/i386/kernel/apic.c       2005/02/07 02:54:31     1.60
+++ linux/arch/i386/kernel/apic.c       2005/03/02 19:58:00     1.61
@@ -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 -urN linux/arch/ia64/kernel/ptrace.c linux/arch/ia64/kernel/ptrace.c
--- linux/arch/ia64/kernel/ptrace.c     2005/02/13 20:16:16     1.34
+++ linux/arch/ia64/kernel/ptrace.c     2005/03/02 19:58:00     1.35
@@ -16,6 +16,7 @@
 #include <linux/smp_lock.h>
 #include <linux/user.h>
 #include <linux/security.h>
+#include <linux/audit.h>
 
 #include <asm/pgtable.h>
 #include <asm/processor.h>
diff -urN linux/arch/ppc64/mm/tlb.c linux/arch/ppc64/mm/tlb.c
--- linux/arch/ppc64/mm/tlb.c   2004/09/19 12:30:06     1.4
+++ linux/arch/ppc64/mm/tlb.c   2005/03/02 19:58:00     1.5
@@ -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 -urN linux/arch/x86_64/mm/srat.c linux/arch/x86_64/mm/srat.c
--- linux/arch/x86_64/mm/srat.c 2005/02/07 02:54:39     1.3
+++ linux/arch/x86_64/mm/srat.c 2005/03/02 19:58:00     1.4
@@ -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 -urN linux/drivers/acpi/pci_irq.c linux/drivers/acpi/pci_irq.c
--- linux/drivers/acpi/pci_irq.c        2005/01/25 04:28:09     1.24
+++ linux/drivers/acpi/pci_irq.c        2005/03/02 19:58:01     1.25
@@ -460,7 +460,7 @@
 acpi_pci_irq_disable (
        struct pci_dev          *dev)
 {
-       u32                     gsi = 0;
+       int                     gsi = 0;
        u8                      pin = 0;
        int                     edge_level = ACPI_LEVEL_SENSITIVE;
        int                     active_high_low = ACPI_ACTIVE_LOW;
@@ -487,10 +487,10 @@
         * If no PRT entry was found, we'll try to derive an IRQ from the
         * device's parent bridge.
         */
-       if (!gsi)
+       if (gsi < 0)
                gsi = acpi_pci_irq_derive(dev, pin,
                                          &edge_level, &active_high_low);
-       if (!gsi)
+       if (gsi < 0)
                return_VOID;
 
        /*
diff -urN linux/drivers/block/cfq-iosched.c linux/drivers/block/cfq-iosched.c
--- linux/drivers/block/cfq-iosched.c   2005/02/07 02:54:43     1.10
+++ linux/drivers/block/cfq-iosched.c   2005/03/02 19:58:01     1.11
@@ -1819,7 +1819,7 @@
        .elevator_owner =       THIS_MODULE,
 };
 
-int cfq_init(void)
+static int __init cfq_init(void)
 {
        int ret;
 
diff -urN linux/drivers/block/genhd.c linux/drivers/block/genhd.c
--- linux/drivers/block/genhd.c 2005/02/07 02:54:43     1.79
+++ linux/drivers/block/genhd.c 2005/03/02 19:58:01     1.80
@@ -660,9 +660,10 @@
 {
        int res = 0;
        struct block_device *bdev = bdget_disk(disk, index);
-       if (bdev)
+       if (bdev) {
                res = __invalidate_device(bdev, 1);
-       bdput(bdev);
+               bdput(bdev);
+       }
        return res;
 }
 
diff -urN linux/drivers/char/keyboard.c linux/drivers/char/keyboard.c
--- linux/drivers/char/keyboard.c       2005/01/25 04:28:12     1.48
+++ linux/drivers/char/keyboard.c       2005/03/02 19:58:01     1.49
@@ -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 -urN linux/drivers/char/pty.c linux/drivers/char/pty.c
--- linux/drivers/char/pty.c    2005/01/13 14:05:52     1.35
+++ linux/drivers/char/pty.c    2005/03/02 19:58:01     1.36
@@ -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 -urN linux/drivers/ide/ide-disk.c linux/drivers/ide/ide-disk.c
--- linux/drivers/ide/ide-disk.c        2005/02/13 20:16:22     1.78
+++ linux/drivers/ide/ide-disk.c        2005/03/02 19:58:01     1.79
@@ -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 -urN linux/drivers/ide/ide-io.c linux/drivers/ide/ide-io.c
--- linux/drivers/ide/ide-io.c  2005/02/28 15:45:14     1.31
+++ linux/drivers/ide/ide-io.c  2005/03/02 19:58:01     1.32
@@ -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 -urN linux/drivers/ide/pci/hpt366.c linux/drivers/ide/pci/hpt366.c
--- linux/drivers/ide/pci/hpt366.c      2005/02/13 20:16:23     1.30
+++ linux/drivers/ide/pci/hpt366.c      2005/03/02 19:58:01     1.31
@@ -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 -urN linux/drivers/input/serio/i8042-x86ia64io.h 
linux/drivers/input/serio/i8042-x86ia64io.h
--- linux/drivers/input/serio/i8042-x86ia64io.h 2005/01/13 14:06:03     1.1
+++ linux/drivers/input/serio/i8042-x86ia64io.h 2005/03/02 19:58:01     1.2
@@ -224,7 +224,7 @@
 
 static struct acpi_driver i8042_acpi_aux_driver = {
        .name           = "i8042",
-       .ids            = "PNP0F13,SYN0801",
+       .ids            = "PNP0F03,PNP0F0B,PNP0F0E,PNP0F12,PNP0F13,SYN0801",
        .ops            = {
                .add            = i8042_acpi_aux_add,
        },
diff -urN linux/drivers/isdn/hisax/icc.c linux/drivers/isdn/hisax/icc.c
--- linux/drivers/isdn/hisax/icc.c      2004/03/11 16:46:49     1.13
+++ linux/drivers/isdn/hisax/icc.c      2005/03/02 19:58:01     1.14
@@ -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 -urN linux/drivers/isdn/hisax/icc.h linux/drivers/isdn/hisax/icc.h
--- linux/drivers/isdn/hisax/icc.h      2004/03/11 16:46:49     1.7
+++ linux/drivers/isdn/hisax/icc.h      2005/03/02 19:58:01     1.8
@@ -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 -urN linux/drivers/net/hp100.c linux/drivers/net/hp100.c
--- linux/drivers/net/hp100.c   2005/01/13 14:06:10     1.44
+++ linux/drivers/net/hp100.c   2005/03/02 19:58:01     1.45
@@ -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 -urN linux/drivers/net/rrunner.c linux/drivers/net/rrunner.c
--- linux/drivers/net/rrunner.c 2004/10/25 20:44:28     1.38
+++ linux/drivers/net/rrunner.c 2005/03/02 19:58:01     1.39
@@ -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 -urN linux/drivers/net/wireless/prism54/islpci_hotplug.c 
linux/drivers/net/wireless/prism54/islpci_hotplug.c
--- linux/drivers/net/wireless/prism54/islpci_hotplug.c 2005/01/13 14:06:17     
1.8
+++ linux/drivers/net/wireless/prism54/islpci_hotplug.c 2005/03/02 19:58:01     
1.9
@@ -163,7 +163,7 @@
        if (rvalue || !mem_addr) {
                printk(KERN_ERR "%s: PCI device memory region not configured; 
fix your BIOS or CardBus bridge/drivers\n",
                       DRV_NAME);
-               goto do_pci_disable_device;
+               goto do_pci_release_regions;
        }
 
        /* enable PCI bus-mastering */
diff -urN linux/drivers/parport/parport_pc.c linux/drivers/parport/parport_pc.c
--- linux/drivers/parport/parport_pc.c  2005/01/25 04:28:38     1.72
+++ linux/drivers/parport/parport_pc.c  2005/03/02 19:58:01     1.73
@@ -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 -urN linux/drivers/scsi/dc395x.c linux/drivers/scsi/dc395x.c
--- linux/drivers/scsi/dc395x.c 2004/12/04 18:16:06     1.15
+++ linux/drivers/scsi/dc395x.c 2005/03/02 19:58:01     1.16
@@ -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 -urN linux/drivers/scsi/scsi_devinfo.c linux/drivers/scsi/scsi_devinfo.c
--- linux/drivers/scsi/scsi_devinfo.c   2004/12/27 02:15:59     1.14
+++ linux/drivers/scsi/scsi_devinfo.c   2005/03/02 19:58:02     1.15
@@ -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 -urN linux/drivers/serial/8250.c linux/drivers/serial/8250.c
--- linux/drivers/serial/8250.c 2005/02/13 20:16:26     1.31
+++ linux/drivers/serial/8250.c 2005/03/02 19:58:02     1.32
@@ -450,9 +450,11 @@
  */
 static int size_fifo(struct uart_8250_port *up)
 {
-       unsigned char old_fcr, old_mcr, old_dll, old_dlm;
+       unsigned char old_fcr, old_mcr, old_dll, old_dlm, old_lcr;
        int count;
 
+       old_lcr = serial_inp(up, UART_LCR);
+       serial_outp(up, UART_LCR, 0);
        old_fcr = serial_inp(up, UART_FCR);
        old_mcr = serial_inp(up, UART_MCR);
        serial_outp(up, UART_FCR, UART_FCR_ENABLE_FIFO |
@@ -475,11 +477,40 @@
        serial_outp(up, UART_LCR, UART_LCR_DLAB);
        serial_outp(up, UART_DLL, old_dll);
        serial_outp(up, UART_DLM, old_dlm);
+       serial_outp(up, UART_LCR, old_lcr);
 
        return count;
 }
 
 /*
+ * Read UART ID using the divisor method - set DLL and DLM to zero
+ * and the revision will be in DLL and device type in DLM.  We
+ * preserve the device state across this.
+ */
+static unsigned int autoconfig_read_divisor_id(struct uart_8250_port *p)
+{
+       unsigned char old_dll, old_dlm, old_lcr;
+       unsigned int id;
+
+       old_lcr = serial_inp(p, UART_LCR);
+       serial_outp(p, UART_LCR, UART_LCR_DLAB);
+
+       old_dll = serial_inp(p, UART_DLL);
+       old_dlm = serial_inp(p, UART_DLM);
+
+       serial_outp(p, UART_DLL, 0);
+       serial_outp(p, UART_DLM, 0);
+
+       id = serial_inp(p, UART_DLL) | serial_inp(p, UART_DLM) << 8;
+
+       serial_outp(p, UART_DLL, old_dll);
+       serial_outp(p, UART_DLM, old_dlm);
+       serial_outp(p, UART_LCR, old_lcr);
+
+       return id;
+}
+
+/*
  * This is a helper routine to autodetect StarTech/Exar/Oxsemi UART's.
  * When this function is called we know it is at least a StarTech
  * 16650 V2, but it might be one of several StarTech UARTs, or one of
@@ -491,7 +522,7 @@
  */
 static void autoconfig_has_efr(struct uart_8250_port *up)
 {
-       unsigned char id1, id2, id3, rev, saved_dll, saved_dlm;
+       unsigned int id1, id2, id3, rev;
 
        /*
         * Everything with an EFR has SLEEP
@@ -541,21 +572,13 @@
         *  0x12 - XR16C2850.
         *  0x14 - XR16C854.
         */
-       serial_outp(up, UART_LCR, UART_LCR_DLAB);
-       saved_dll = serial_inp(up, UART_DLL);
-       saved_dlm = serial_inp(up, UART_DLM);
-       serial_outp(up, UART_DLL, 0);
-       serial_outp(up, UART_DLM, 0);
-       id2 = serial_inp(up, UART_DLL);
-       id1 = serial_inp(up, UART_DLM);
-       serial_outp(up, UART_DLL, saved_dll);
-       serial_outp(up, UART_DLM, saved_dlm);
-
-       DEBUG_AUTOCONF("850id=%02x:%02x ", id1, id2);
-
-       if (id1 == 0x10 || id1 == 0x12 || id1 == 0x14) {
-               if (id1 == 0x10)
-                       up->rev = id2;
+       id1 = autoconfig_read_divisor_id(up);
+       DEBUG_AUTOCONF("850id=%04x ", id1);
+
+       id2 = id1 >> 8;
+       if (id2 == 0x10 || id2 == 0x12 || id2 == 0x14) {
+               if (id2 == 0x10)
+                       up->rev = id1 & 255;
                up->port.type = PORT_16850;
                return;
        }
@@ -597,6 +620,19 @@
                up->port.type = PORT_16450;
 }
 
+static int broken_efr(struct uart_8250_port *up)
+{
+       /*
+        * Exar ST16C2550 "A2" devices incorrectly detect as
+        * having an EFR, and report an ID of 0x0201.  See
+        * http://www.exar.com/info.php?pdf=dan180_oct2004.pdf
+        */
+       if (autoconfig_read_divisor_id(up) == 0x0201 && size_fifo(up) == 16)
+               return 1;
+
+       return 0;
+}
+
 /*
  * We know that the chip has FIFOs.  Does it have an EFR?  The
  * EFR is located in the same register position as the IIR and
@@ -633,7 +669,7 @@
         * (other ST16C650V2 UARTs, TI16C752A, etc)
         */
        serial_outp(up, UART_LCR, 0xBF);
-       if (serial_in(up, UART_EFR) == 0) {
+       if (serial_in(up, UART_EFR) == 0 && !broken_efr(up)) {
                DEBUG_AUTOCONF("EFRv2 ");
                autoconfig_has_efr(up);
                return;
diff -urN linux/drivers/serial/8250_pci.c linux/drivers/serial/8250_pci.c
--- linux/drivers/serial/8250_pci.c     2004/12/04 18:16:07     1.28
+++ linux/drivers/serial/8250_pci.c     2005/03/02 19:58:02     1.29
@@ -2212,6 +2212,13 @@
                0, pbn_exar_XR17C158 },
 
        /*
+        * Topic TP560 Data/Fax/Voice 56k modem (reported by Evan Clarke)
+        */
+       {       PCI_VENDOR_ID_TOPIC, PCI_DEVICE_ID_TOPIC_TP560,
+               PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+               pbn_b0_1_115200 },
+
+       /*
         * These entries match devices with class COMMUNICATION_SERIAL,
         * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
         */
@@ -2241,7 +2248,7 @@
 
 static int __init serial8250_pci_init(void)
 {
-       return pci_module_init(&serial_pci_driver);
+       return pci_register_driver(&serial_pci_driver);
 }
 
 static void __exit serial8250_pci_exit(void)
diff -urN linux/drivers/serial/Makefile linux/drivers/serial/Makefile
--- linux/drivers/serial/Makefile       2005/02/13 20:16:26     1.31
+++ linux/drivers/serial/Makefile       2005/03/02 19:58:02     1.32
@@ -6,9 +6,9 @@
 
 serial-8250-y :=
 serial-8250-$(CONFIG_SERIAL_8250_ACPI) += 8250_acpi.o
+serial-8250-$(CONFIG_PNP) += 8250_pnp.o
 serial-8250-$(CONFIG_GSC) += 8250_gsc.o
 serial-8250-$(CONFIG_PCI) += 8250_pci.o
-serial-8250-$(CONFIG_PNP) += 8250_pnp.o
 serial-8250-$(CONFIG_HP300) += 8250_hp300.o
 
 obj-$(CONFIG_SERIAL_CORE) += serial_core.o
diff -urN linux/drivers/usb/class/cdc-acm.c linux/drivers/usb/class/cdc-acm.c
--- linux/drivers/usb/class/cdc-acm.c   2005/02/13 20:16:27     1.42
+++ linux/drivers/usb/class/cdc-acm.c   2005/03/02 19:58:02     1.43
@@ -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 -urN linux/drivers/usb/core/devio.c linux/drivers/usb/core/devio.c
--- linux/drivers/usb/core/devio.c      2005/02/13 20:16:27     1.35
+++ linux/drivers/usb/core/devio.c      2005/03/02 19:58:02     1.36
@@ -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 -urN linux/drivers/video/modedb.c linux/drivers/video/modedb.c
--- linux/drivers/video/modedb.c        2005/01/13 14:06:29     1.17
+++ linux/drivers/video/modedb.c        2005/03/02 19:58:02     1.18
@@ -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 -urN linux/drivers/video/aty/radeon_base.c 
linux/drivers/video/aty/radeon_base.c
--- linux/drivers/video/aty/radeon_base.c       2005/02/28 15:45:17     1.16
+++ linux/drivers/video/aty/radeon_base.c       2005/03/02 19:58:02     1.17
@@ -2551,7 +2551,7 @@
 MODULE_DESCRIPTION("framebuffer driver for ATI Radeon chipset");
 MODULE_LICENSE("GPL");
 module_param(noaccel, bool, 0);
-module_param(default_dynclk, int, -2);
+module_param(default_dynclk, int, 0);
 MODULE_PARM_DESC(default_dynclk, "int: -2=enable on mobility only,-1=do not 
change,0=off,1=on");
 MODULE_PARM_DESC(noaccel, "bool: disable acceleration");
 module_param(nomodeset, bool, 0);
diff -urN linux/fs/binfmt_elf.c linux/fs/binfmt_elf.c
--- linux/fs/binfmt_elf.c       2005/02/28 15:45:17     1.106
+++ linux/fs/binfmt_elf.c       2005/03/02 19:58:02     1.107
@@ -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 -urN linux/fs/pipe.c linux/fs/pipe.c
--- linux/fs/pipe.c     2005/02/07 02:54:54     1.63
+++ linux/fs/pipe.c     2005/03/02 19:58:02     1.64
@@ -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 -urN linux/fs/sysfs/file.c linux/fs/sysfs/file.c
--- linux/fs/sysfs/file.c       2004/11/15 11:49:36     1.13
+++ linux/fs/sysfs/file.c       2005/03/02 19:58:02     1.14
@@ -231,15 +231,16 @@
 sysfs_write_file(struct file *file, const char __user *buf, size_t count, 
loff_t *ppos)
 {
        struct sysfs_buffer * buffer = file->private_data;
+       ssize_t len;
 
        down(&buffer->sem);
-       count = fill_write_buffer(buffer,buf,count);
-       if (count > 0)
-               count = flush_write_buffer(file->f_dentry,buffer,count);
-       if (count > 0)
-               *ppos += count;
+       len = fill_write_buffer(buffer, buf, count);
+       if (len > 0)
+               len = flush_write_buffer(file->f_dentry, buffer, len);
+       if (len > 0)
+               *ppos += len;
        up(&buffer->sem);
-       return count;
+       return len;
 }
 
 static int check_perm(struct inode * inode, struct file * file)
diff -urN linux/include/linux/ide.h linux/include/linux/ide.h
--- linux/include/linux/ide.h   2005/02/13 20:16:31     1.99
+++ linux/include/linux/ide.h   2005/03/02 19:58:02     1.100
@@ -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 -urN linux/include/linux/pci_ids.h linux/include/linux/pci_ids.h
--- linux/include/linux/pci_ids.h       2005/01/25 04:28:56     1.137
+++ linux/include/linux/pci_ids.h       2005/03/02 19:58:02     1.138
@@ -1971,6 +1971,9 @@
 #define PCI_DEVICE_ID_BCM4401          0x4401
 #define PCI_DEVICE_ID_BCM4401B0                0x4402
 
+#define PCI_VENDOR_ID_TOPIC            0x151f
+#define PCI_DEVICE_ID_TOPIC_TP560      0x0000
+
 #define PCI_VENDOR_ID_ENE              0x1524
 #define PCI_DEVICE_ID_ENE_1211         0x1211
 #define PCI_DEVICE_ID_ENE_1225         0x1225
diff -urN linux/include/linux/sysctl.h linux/include/linux/sysctl.h
--- linux/include/linux/sysctl.h        2005/02/28 15:45:18     1.93
+++ linux/include/linux/sysctl.h        2005/03/02 19:58:02     1.94
@@ -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 -urN linux/include/net/ipv6.h linux/include/net/ipv6.h
--- linux/include/net/ipv6.h    2005/01/25 04:28:58     1.37
+++ linux/include/net/ipv6.h    2005/03/02 19:58:03     1.38
@@ -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 -urN linux/kernel/audit.c linux/kernel/audit.c
--- linux/kernel/audit.c        2005/02/07 02:55:03     1.6
+++ linux/kernel/audit.c        2005/03/02 19:58:03     1.7
@@ -360,7 +360,7 @@
                status_set.backlog_limit = audit_backlog_limit;
                status_set.lost          = atomic_read(&audit_lost);
                status_set.backlog       = atomic_read(&audit_backlog);
-               audit_send_reply(pid, seq, AUDIT_GET, 0, 0,
+               audit_send_reply(NETLINK_CB(skb).pid, seq, AUDIT_GET, 0, 0,
                                 &status_set, sizeof(status_set));
                break;
        case AUDIT_SET:
@@ -407,8 +407,8 @@
                /* fallthrough */
        case AUDIT_LIST:
 #ifdef CONFIG_AUDITSYSCALL
-               err = audit_receive_filter(nlh->nlmsg_type, pid, uid, seq,
-                                          data);
+               err = audit_receive_filter(nlh->nlmsg_type, NETLINK_CB(skb).pid,
+                                          uid, seq, data);
 #else
                err = -EOPNOTSUPP;
 #endif
diff -urN linux/kernel/auditsc.c linux/kernel/auditsc.c
--- linux/kernel/auditsc.c      2005/02/07 02:55:03     1.6
+++ linux/kernel/auditsc.c      2005/03/02 19:58:03     1.7
@@ -358,7 +358,7 @@
                case AUDIT_INODE:
                        if (ctx) {
                                for (j = 0; j < ctx->name_count; j++) {
-                                       if (MINOR(ctx->names[j].ino)==value) {
+                                       if (ctx->names[j].ino == value) {
                                                ++result;
                                                break;
                                        }
diff -urN linux/kernel/sysctl.c linux/kernel/sysctl.c
--- linux/kernel/sysctl.c       2005/02/07 02:55:03     1.94
+++ linux/kernel/sysctl.c       2005/03/02 19:58:03     1.95
@@ -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 -urN linux/mm/highmem.c linux/mm/highmem.c
--- linux/mm/highmem.c  2005/01/13 14:07:01     1.54
+++ linux/mm/highmem.c  2005/03/02 19:58:03     1.55
@@ -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 -urN linux/net/core/pktgen.c linux/net/core/pktgen.c
--- linux/net/core/pktgen.c     2005/02/28 15:45:19     1.20
+++ linux/net/core/pktgen.c     2005/03/02 19:58:03     1.21
@@ -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 -urN linux/net/ipv4/fib_hash.c linux/net/ipv4/fib_hash.c
--- linux/net/ipv4/fib_hash.c   2005/01/25 04:29:03     1.23
+++ linux/net/ipv4/fib_hash.c   2005/03/02 19:58:03     1.24
@@ -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 -urN linux/net/ipv4/route.c linux/net/ipv4/route.c
--- linux/net/ipv4/route.c      2005/02/28 15:45:19     1.82
+++ linux/net/ipv4/route.c      2005/03/02 19:58:03     1.83
@@ -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 -urN linux/net/ipv4/netfilter/ip_conntrack_standalone.c 
linux/net/ipv4/netfilter/ip_conntrack_standalone.c
--- linux/net/ipv4/netfilter/ip_conntrack_standalone.c  2005/02/07 02:55:05     
1.36
+++ linux/net/ipv4/netfilter/ip_conntrack_standalone.c  2005/03/02 19:58:03     
1.37
@@ -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 -urN linux/net/ipv4/netfilter/ipt_hashlimit.c 
linux/net/ipv4/netfilter/ipt_hashlimit.c
--- linux/net/ipv4/netfilter/ipt_hashlimit.c    2005/02/13 20:16:33     1.4
+++ linux/net/ipv4/netfilter/ipt_hashlimit.c    2005/03/02 19:58:03     1.5
@@ -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 -urN linux/net/ipv6/addrconf.c linux/net/ipv6/addrconf.c
--- linux/net/ipv6/addrconf.c   2005/01/25 04:29:05     1.73
+++ linux/net/ipv6/addrconf.c   2005/03/02 19:58:03     1.74
@@ -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 -urN linux/net/ipv6/af_inet6.c linux/net/ipv6/af_inet6.c
--- linux/net/ipv6/af_inet6.c   2005/01/25 04:29:05     1.69
+++ linux/net/ipv6/af_inet6.c   2005/03/02 19:58:03     1.70
@@ -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 -urN linux/net/ipv6/proc.c linux/net/ipv6/proc.c
--- linux/net/ipv6/proc.c       2004/08/06 00:33:32     1.26
+++ linux/net/ipv6/proc.c       2005/03/02 19:58:03     1.27
@@ -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 -urN linux/net/unix/af_unix.c linux/net/unix/af_unix.c
--- linux/net/unix/af_unix.c    2005/01/25 04:29:09     1.91
+++ linux/net/unix/af_unix.c    2005/03/02 19:58:03     1.92
@@ -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 -urN linux/security/keys/compat.c linux/security/keys/compat.c
--- linux/security/keys/compat.c        2004/11/15 11:49:52     1.1
+++ linux/security/keys/compat.c        2005/03/02 19:58:03     1.2
@@ -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 -urN linux/security/keys/keyctl.c linux/security/keys/keyctl.c
--- linux/security/keys/keyctl.c        2004/11/15 11:49:52     1.2
+++ linux/security/keys/keyctl.c        2005/03/02 19:58:03     1.3
@@ -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 -urN linux/security/selinux/ss/conditional.c 
linux/security/selinux/ss/conditional.c
--- linux/security/selinux/ss/conditional.c     2005/01/13 14:07:09     1.3
+++ linux/security/selinux/ss/conditional.c     2005/03/02 19:58:04     1.4
@@ -401,8 +401,10 @@
                expr->expr_type = le32_to_cpu(buf[0]);
                expr->bool = le32_to_cpu(buf[1]);
 
-               if (!expr_isvalid(p, expr))
+               if (!expr_isvalid(p, expr)) {
+                       kfree(expr);
                        goto err;
+               }
 
                if (i == 0) {
                        node->expr = expr;
diff -urN linux/security/selinux/ss/policydb.c 
linux/security/selinux/ss/policydb.c
--- linux/security/selinux/ss/policydb.c        2005/01/25 04:29:14     1.12
+++ linux/security/selinux/ss/policydb.c        2005/03/02 19:58:04     1.13
@@ -773,7 +773,7 @@
        cladatum = kmalloc(sizeof(*cladatum), GFP_KERNEL);
        if (!cladatum) {
                rc = -ENOMEM;
-               goto bad;
+               goto out;
        }
        memset(cladatum, 0, sizeof(*cladatum));
 
diff -urN linux/sound/oss/aedsp16.c linux/sound/oss/aedsp16.c
--- linux/sound/oss/aedsp16.c   2005/01/13 14:07:13     1.3
+++ linux/sound/oss/aedsp16.c   2005/03/02 19:58:04     1.4
@@ -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 -urN linux/sound/oss/opl3sa2.c linux/sound/oss/opl3sa2.c
--- linux/sound/oss/opl3sa2.c   2005/01/25 04:29:15     1.18
+++ linux/sound/oss/opl3sa2.c   2005/03/02 19:58:04     1.19
@@ -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 -urN linux/sound/oss/sonicvibes.c linux/sound/oss/sonicvibes.c
--- linux/sound/oss/sonicvibes.c        2005/01/13 14:07:13     1.20
+++ linux/sound/oss/sonicvibes.c        2005/03/02 19:58:04     1.21
@@ -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;

<Prev in Thread] Current Thread [Next in Thread>