]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Auto-update from upstream
authorKyle McMartin <kyle@parisc-linux.org>
Thu, 27 Oct 2005 03:28:40 +0000 (23:28 -0400)
committerKyle McMartin <kyle@parisc-linux.org>
Thu, 27 Oct 2005 03:28:40 +0000 (23:28 -0400)
45 files changed:
Documentation/kernel-parameters.txt
arch/arm/mach-pxa/corgi_lcd.c
arch/ppc64/kernel/mpic.c
arch/um/include/sysdep-i386/thread.h
arch/um/include/sysdep-x86_64/thread.h
drivers/char/drm/radeon_cp.c
drivers/infiniband/hw/mthca/mthca_eq.c
drivers/md/md.c
drivers/media/video/Kconfig
drivers/pci/quirks.c
drivers/pci/setup-bus.c
drivers/scsi/NCR5380.c
drivers/scsi/aacraid/aacraid.h
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/scsi_devinfo.c
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_transport_fc.c
drivers/serial/8250_pci.c
drivers/video/fbsysfs.c
fs/aio.c
fs/hfsplus/super.c
fs/inotify.c
include/asm-alpha/atomic.h
include/asm-alpha/barrier.h [new file with mode: 0644]
include/asm-alpha/system.h
include/asm-arm/bitops.h
include/linux/idr.h
include/linux/pci_ids.h
include/net/ax25.h
include/net/llc_pdu.h
kernel/exit.c
kernel/posix-cpu-timers.c
kernel/sched.c
lib/idr.c
mm/page_alloc.c
net/802/tr.c
net/core/neighbour.c
net/core/skbuff.c
net/core/wireless.c
net/ipv4/ip_output.c
net/ipv6/ip6_flowlabel.c
net/sunrpc/svcsock.c
security/selinux/selinuxfs.c
security/selinux/ss/policydb.c
sound/core/init.c

index 7086f0a90d14a47d6ba3295e624a7bda414062a9..971589a9752dc36585facd3fc6e40570f6e0a2ae 100644 (file)
@@ -17,7 +17,7 @@ are specified on the kernel command line with the module name plus
 
        usbcore.blinkenlights=1
 
-The text in square brackets at the beginning of the description state the
+The text in square brackets at the beginning of the description states the
 restrictions on the kernel for the said kernel parameter to be valid. The
 restrictions referred to are that the relevant option is valid if:
 
@@ -27,8 +27,8 @@ restrictions referred to are that the relevant option is valid if:
        APM     Advanced Power Management support is enabled.
        AX25    Appropriate AX.25 support is enabled.
        CD      Appropriate CD support is enabled.
-       DEVFS   devfs support is enabled. 
-       DRM     Direct Rendering Management support is enabled. 
+       DEVFS   devfs support is enabled.
+       DRM     Direct Rendering Management support is enabled.
        EDD     BIOS Enhanced Disk Drive Services (EDD) is enabled
        EFI     EFI Partitioning (GPT) is enabled
        EIDE    EIDE/ATAPI support is enabled.
@@ -71,7 +71,7 @@ restrictions referred to are that the relevant option is valid if:
        SERIAL  Serial support is enabled.
        SMP     The kernel is an SMP kernel.
        SPARC   Sparc architecture is enabled.
-       SWSUSP  Software suspension is enabled.
+       SWSUSP  Software suspend is enabled.
        TS      Appropriate touchscreen support is enabled.
        USB     USB support is enabled.
        USBHID  USB Human Interface Device support is enabled.
@@ -105,13 +105,13 @@ running once the system is up.
                        See header of drivers/scsi/53c7xx.c.
                        See also Documentation/scsi/ncr53c7xx.txt.
 
-       acpi=           [HW,ACPI] Advanced Configuration and Power Interface 
-                       Format: { force | off | ht | strict }
+       acpi=           [HW,ACPI] Advanced Configuration and Power Interface
+                       Format: { force | off | ht | strict | noirq }
                        force -- enable ACPI if default was off
                        off -- disable ACPI if default was on
                        noirq -- do not use ACPI for IRQ routing
                        ht -- run only enough ACPI to enable Hyper Threading
-                       strict --  Be less tolerant of platforms that are not
+                       strict -- Be less tolerant of platforms that are not
                                strictly ACPI specification compliant.
 
                        See also Documentation/pm.txt, pci=noacpi
@@ -119,20 +119,23 @@ running once the system is up.
        acpi_sleep=     [HW,ACPI] Sleep options
                        Format: { s3_bios, s3_mode }
                        See Documentation/power/video.txt
+
        acpi_sci=       [HW,ACPI] ACPI System Control Interrupt trigger mode
-                       Format: { level | edge |  high | low }
+                       Format: { level | edge | high | low }
 
-       acpi_irq_balance        [HW,ACPI] ACPI will balance active IRQs
-                               default in APIC mode
+       acpi_irq_balance [HW,ACPI]
+                       ACPI will balance active IRQs
+                       default in APIC mode
 
-       acpi_irq_nobalance      [HW,ACPI] ACPI will not move active IRQs (default)
-                               default in PIC mode
+       acpi_irq_nobalance [HW,ACPI]
+                       ACPI will not move active IRQs (default)
+                       default in PIC mode
 
-       acpi_irq_pci=   [HW,ACPI] If irq_balance, Clear listed IRQs for use by PCI
+       acpi_irq_pci=   [HW,ACPI] If irq_balance, clear listed IRQs for
+                       use by PCI
                        Format: <irq>,<irq>...
 
-       acpi_irq_isa=   [HW,ACPI] If irq_balance, Mark listed IRQs used by ISA
+       acpi_irq_isa=   [HW,ACPI] If irq_balance, mark listed IRQs used by ISA
                        Format: <irq>,<irq>...
 
        acpi_osi=       [HW,ACPI] empty param disables _OSI
@@ -145,14 +148,14 @@ running once the system is up.
 
        acpi_dbg_layer= [HW,ACPI]
                        Format: <int>
-                       Each bit of the <int> indicates an acpi debug layer,
+                       Each bit of the <int> indicates an ACPI debug layer,
                        1: enable, 0: disable. It is useful for boot time
                        debugging. After system has booted up, it can be set
                        via /proc/acpi/debug_layer.
 
        acpi_dbg_level= [HW,ACPI]
                        Format: <int>
-                       Each bit of the <int> indicates an acpi debug level,
+                       Each bit of the <int> indicates an ACPI debug level,
                        1: enable, 0: disable. It is useful for boot time
                        debugging. After system has booted up, it can be set
                        via /proc/acpi/debug_level.
@@ -161,12 +164,13 @@ running once the system is up.
 
        acpi_generic_hotkey [HW,ACPI]
                        Allow consolidated generic hotkey driver to
-                       over-ride platform specific driver.
+                       override platform specific driver.
                        See also Documentation/acpi-hotkey.txt.
 
        enable_timer_pin_1 [i386,x86-64]
                        Enable PIN 1 of APIC timer
-                       Can be useful to work around chipset bugs (in particular on some ATI chipsets)
+                       Can be useful to work around chipset bugs
+                       (in particular on some ATI chipsets).
                        The kernel tries to set a reasonable default.
 
        disable_timer_pin_1 [i386,x86-64]
@@ -182,7 +186,7 @@ running once the system is up.
 
        adlib=          [HW,OSS]
                        Format: <io>
+
        advansys=       [HW,SCSI]
                        See header of drivers/scsi/advansys.c.
 
@@ -192,7 +196,7 @@ running once the system is up.
        aedsp16=        [HW,OSS] Audio Excel DSP 16
                        Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
                        See also header of sound/oss/aedsp16.c.
+
        aha152x=        [HW,SCSI]
                        See Documentation/scsi/aha152x.txt.
 
@@ -205,10 +209,6 @@ running once the system is up.
        aic79xx=        [HW,SCSI]
                        See Documentation/scsi/aic79xx.txt.
 
-       AM53C974=       [HW,SCSI]
-                       Format: <host-scsi-id>,<target-scsi-id>,<max-rate>,<max-offset>
-                       See also header of drivers/scsi/AM53C974.c.
-
        amijoy.map=     [HW,JOY] Amiga joystick support
                        Map of devices attached to JOY0DAT and JOY1DAT
                        Format: <a>,<b>
@@ -219,23 +219,24 @@ running once the system is up.
                        connected to one of 16 gameports
                        Format: <type1>,<type2>,..<type16>
 
-       apc=            [HW,SPARC] Power management functions (SPARCstation-4/5 + deriv.)
+       apc=            [HW,SPARC]
+                       Power management functions (SPARCstation-4/5 + deriv.)
                        Format: noidle
                        Disable APC CPU standby support. SPARCstation-Fox does
                        not play well with APC CPU idle - disable it if you have
                        APC and your system crashes randomly.
 
-       apic=           [APIC,i386] Change the output verbosity  whilst booting
+       apic=           [APIC,i386] Change the output verbosity whilst booting
                        Format: { quiet (default) | verbose | debug }
                        Change the amount of debugging information output
                        when initialising the APIC and IO-APIC components.
+
        apm=            [APM] Advanced Power Management
                        See header of arch/i386/kernel/apm.c.
 
        applicom=       [HW]
                        Format: <mem>,<irq>
+
        arcrimi=        [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards
                        Format: <io>,<irq>,<nodeID>
 
@@ -250,38 +251,40 @@ running once the system is up.
 
        atkbd.reset=    [HW] Reset keyboard during initialization
 
-       atkbd.set=      [HW] Select keyboard code set 
-                       Format: <int> (2 = AT (default) 3 = PS/2)
+       atkbd.set=      [HW] Select keyboard code set
+                       Format: <int> (2 = AT (default), 3 = PS/2)
 
        atkbd.scroll=   [HW] Enable scroll wheel on MS Office and similar
                        keyboards
 
        atkbd.softraw=  [HW] Choose between synthetic and real raw mode
                        Format: <bool> (0 = real, 1 = synthetic (default))
-       
-       atkbd.softrepeat=
-                       [HW] Use software keyboard repeat
+
+       atkbd.softrepeat= [HW]
+                       Use software keyboard repeat
 
        autotest        [IA64]
 
        awe=            [HW,OSS] AWE32/SB32/AWE64 wave table synth
                        Format: <io>,<memsize>,<isapnp>
+
        aztcd=          [HW,CD] Aztech CD268 CDROM driver
                        Format: <io>,0x79 (?)
 
        baycom_epp=     [HW,AX25]
                        Format: <io>,<mode>
+
        baycom_par=     [HW,AX25] BayCom Parallel Port AX.25 Modem
                        Format: <io>,<mode>
                        See header of drivers/net/hamradio/baycom_par.c.
 
-       baycom_ser_fdx= [HW,AX25] BayCom Serial Port AX.25 Modem (Full Duplex Mode)
+       baycom_ser_fdx= [HW,AX25]
+                       BayCom Serial Port AX.25 Modem (Full Duplex Mode)
                        Format: <io>,<irq>,<mode>[,<baud>]
                        See header of drivers/net/hamradio/baycom_ser_fdx.c.
 
-       baycom_ser_hdx= [HW,AX25] BayCom Serial Port AX.25 Modem (Half Duplex Mode)
+       baycom_ser_hdx= [HW,AX25]
+                       BayCom Serial Port AX.25 Modem (Half Duplex Mode)
                        Format: <io>,<irq>,<mode>
                        See header of drivers/net/hamradio/baycom_ser_hdx.c.
 
@@ -292,7 +295,8 @@ running once the system is up.
        blkmtd_count=
 
        bttv.card=      [HW,V4L] bttv (bt848 + bt878 based grabber cards)
-       bttv.radio=     Most important insmod options are available as kernel args too.
+       bttv.radio=     Most important insmod options are available as
+                       kernel args too.
        bttv.pll=       See Documentation/video4linux/bttv/Insmod-options
        bttv.tuner=     and Documentation/video4linux/bttv/CARDLIST
 
@@ -318,15 +322,17 @@ running once the system is up.
        checkreqprot    [SELINUX] Set initial checkreqprot flag value.
                        Format: { "0" | "1" }
                        See security/selinux/Kconfig help text.
-                       0 -- check protection applied by kernel (includes any implied execute protection).
+                       0 -- check protection applied by kernel (includes
+                               any implied execute protection).
                        1 -- check protection requested by application.
                        Default value is set via a kernel config option.
-                       Value can be changed at runtime via /selinux/checkreqprot.
-       clock=          [BUGS=IA-32, HW] gettimeofday timesource override. 
+                       Value can be changed at runtime via
+                               /selinux/checkreqprot.
+
+       clock=          [BUGS=IA-32,HW] gettimeofday timesource override.
                        Forces specified timesource (if avaliable) to be used
-                       when calculating gettimeofday(). If specicified timesource
-                       is not avalible, it defaults to PIT. 
+                       when calculating gettimeofday(). If specicified
+                       timesource is not avalible, it defaults to PIT.
                        Format: { pit | tsc | cyclone | pmtmr }
 
        hpet=           [IA-32,HPET] option to disable HPET and use PIT.
@@ -336,17 +342,19 @@ running once the system is up.
                        Format: { auto | [<io>,][<irq>] }
 
        com20020=       [HW,NET] ARCnet - COM20020 chipset
-                       Format: <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]]
+                       Format:
+                       <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]]
 
        com90io=        [HW,NET] ARCnet - COM90xx chipset (IO-mapped buffers)
                        Format: <io>[,<irq>]
 
-       com90xx=        [HW,NET] ARCnet - COM90xx chipset (memory-mapped buffers)
+       com90xx=        [HW,NET]
+                       ARCnet - COM90xx chipset (memory-mapped buffers)
                        Format: <io>[,<irq>[,<memstart>]]
 
        condev=         [HW,S390] console device
        conmode=
+
        console=        [KNL] Output console device and options.
 
                tty<n>  Use the virtual console device <n>.
@@ -367,7 +375,8 @@ running once the system is up.
                        options are the same as for ttyS, above.
 
        cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver
-                       Format: <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
+                       Format:
+                       <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
 
        cpia_pp=        [HW,PPT]
                        Format: { parport<nr> | auto | none }
@@ -384,10 +393,10 @@ running once the system is up.
 
        cs89x0_media=   [HW,NET]
                        Format: { rj45 | aui | bnc }
+
        cyclades=       [HW,SERIAL] Cyclades multi-serial port adapter.
-       dasd=           [HW,NET]    
+
+       dasd=           [HW,NET]
                        See header of drivers/s390/block/dasd_devmap.c.
 
        db9.dev[2|3]=   [HW,JOY] Multisystem joystick support via parallel port
@@ -406,7 +415,7 @@ running once the system is up.
 
        dhash_entries=  [KNL]
                        Set number of hash buckets for dentry cache.
+
        digi=           [HW,SERIAL]
                        IO parameters + enable/disable command.
 
@@ -424,11 +433,11 @@ running once the system is up.
 
        dtc3181e=       [HW,SCSI]
 
-       earlyprintk=    [IA-32, X86-64]
+       earlyprintk=    [IA-32,X86-64]
                        earlyprintk=vga
                        earlyprintk=serial[,ttySn[,baudrate]]
 
-                       Append ,keep to not disable it when the real console
+                       Append ",keep" to not disable it when the real console
                        takes over.
 
                        Only vga or serial at a time, not both.
@@ -451,7 +460,7 @@ running once the system is up.
                        Format: {"of[f]" | "sk[ipmbr]"}
                        See comment in arch/i386/boot/edd.S
 
-       eicon=          [HW,ISDN] 
+       eicon=          [HW,ISDN]
                        Format: <id>,<membase>,<irq>
 
        eisa_irq_edge=  [PARISC,HW]
@@ -462,12 +471,13 @@ running once the system is up.
                        arch/i386/kernel/cpu/cpufreq/elanfreq.c.
 
        elevator=       [IOSCHED]
-                       Format: {"as"|"cfq"|"deadline"|"noop"}
-                       See Documentation/block/as-iosched.txt
-                       and Documentation/block/deadline-iosched.txt for details.
+                       Format: {"as" | "cfq" | "deadline" | "noop"}
+                       See Documentation/block/as-iosched.txt and
+                       Documentation/block/deadline-iosched.txt for details.
+
        elfcorehdr=     [IA-32]
-                       Specifies physical address of start of kernel core image
-                       elf header.
+                       Specifies physical address of start of kernel core
+                       image elf header.
                        See Documentation/kdump.txt for details.
 
        enforcing       [SELINUX] Set initial enforcing status.
@@ -485,7 +495,7 @@ running once the system is up.
        es1371=         [HW,OSS]
                        Format: <spdif>,[<nomix>,[<amplifier>]]
                        See also header of sound/oss/es1371.c.
+
        ether=          [HW,NET] Ethernet cards parameters
                        This option is obsoleted by the "netdev=" option, which
                        has equivalent usage. See its documentation for details.
@@ -526,12 +536,13 @@ running once the system is up.
 
        gus=            [HW,OSS]
                        Format: <io>,<irq>,<dma>,<dma16>
+
        gvp11=          [HW,SCSI]
 
        hashdist=       [KNL,NUMA] Large hashes allocated during boot
                        are distributed across NUMA nodes.  Defaults on
                        for IA-64, off otherwise.
+                       Format: 0 | 1 (for off | on)
 
        hcl=            [IA-64] SGI's Hardware Graph compatibility layer
 
@@ -595,13 +606,13 @@ running once the system is up.
        ide?=           [HW] (E)IDE subsystem
                        Format: ide?=noprobe or chipset specific parameters.
                        See Documentation/ide.txt.
-       
+
        idebus=         [HW] (E)IDE subsystem - VLB/PCI bus speed
                        See Documentation/ide.txt.
 
        idle=           [HW]
                        Format: idle=poll or idle=halt
+
        ihash_entries=  [KNL]
                        Set number of hash buckets for inode cache.
 
@@ -649,7 +660,7 @@ running once the system is up.
                        firmware running.
 
        isapnp=         [ISAPNP]
-                       Format: <RDP>, <reset>, <pci_scan>, <verbosity>
+                       Format: <RDP>,<reset>,<pci_scan>,<verbosity>
 
        isolcpus=       [KNL,SMP] Isolate CPUs from the general scheduler.
                        Format: <cpu number>,...,<cpu number>
@@ -661,32 +672,33 @@ running once the system is up.
                        "number of CPUs in system - 1".
 
                        This option is the preferred way to isolate CPUs. The
-                       alternative - manually setting the CPU mask of all tasks
-                       in the system can cause problems and suboptimal load
-                       balancer performance.
+                       alternative -- manually setting the CPU mask of all
+                       tasks in the system -- can cause problems and
+                       suboptimal load balancer performance.
 
        isp16=          [HW,CD]
                        Format: <io>,<irq>,<dma>,<setup>
 
-       iucv=           [HW,NET] 
+       iucv=           [HW,NET]
 
        js=             [HW,JOY] Analog joystick
                        See Documentation/input/joystick.txt.
 
        keepinitrd      [HW,ARM]
 
-       kstack=N        [IA-32, X86-64] Print N words from the kernel stack
+       kstack=N        [IA-32,X86-64] Print N words from the kernel stack
                        in oops dumps.
 
        l2cr=           [PPC]
 
-       lapic           [IA-32,APIC] Enable the local APIC even if BIOS disabled it.
+       lapic           [IA-32,APIC] Enable the local APIC even if BIOS
+                       disabled it.
 
        lasi=           [HW,SCSI] PARISC LASI driver for the 53c700 chip
                        Format: addr:<io>,irq:<irq>
 
-       llsc*=          [IA64]
-                       See function print_params() in arch/ia64/sn/kernel/llsc4.c.
+       llsc*=          [IA64] See function print_params() in
+                       arch/ia64/sn/kernel/llsc4.c.
 
        load_ramdisk=   [RAM] List of ramdisks to load from floppy
                        See Documentation/ramdisk.txt.
@@ -713,8 +725,9 @@ running once the system is up.
                        7 (KERN_DEBUG)          debug-level messages
 
        log_buf_len=n   Sets the size of the printk ring buffer, in bytes.
-                       Format is n, nk, nM.  n must be a power of two.  The
-                       default is set in kernel config.
+                       Format: { n | nk | nM }
+                       n must be a power of two.  The default size
+                       is set in the kernel config file.
 
        lp=0            [LP]    Specify parallel ports to use, e.g,
        lp=port[,port...]       lp=none,parport0 (lp0 not configured, lp1 uses
@@ -750,23 +763,23 @@ running once the system is up.
        ltpc=           [NET]
                        Format: <io>,<irq>,<dma>
 
-       mac5380=        [HW,SCSI]
-                       Format: <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
+       mac5380=        [HW,SCSI] Format:
+                       <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
 
-       mac53c9x=       [HW,SCSI]
-                       Format: <num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
+       mac53c9x=       [HW,SCSI] Format:
+                       <num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
 
-       machvec=        [IA64]
-                       Force the use of a particular machine-vector (machvec) in a generic
-                       kernel.  Example: machvec=hpzx1_swiotlb
+       machvec=        [IA64] Force the use of a particular machine-vector
+                       (machvec) in a generic kernel.
+                       Example: machvec=hpzx1_swiotlb
 
-       mad16=          [HW,OSS]
-                       Format: <io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick>
+       mad16=          [HW,OSS] Format:
+                       <io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick>
 
        maui=           [HW,OSS]
                        Format: <io>,<irq>
-       max_loop=       [LOOP] Maximum number of loopback devices that can
+
+       max_loop=       [LOOP] Maximum number of loopback devices that can
                        be mounted
                        Format: <1-256>
 
@@ -776,11 +789,11 @@ running once the system is up.
        max_addr=[KMG]  [KNL,BOOT,ia64] All physical memory greater than or
                        equal to this physical address is ignored.
 
-       max_luns=       [SCSI] Maximum number of LUNs to probe
+       max_luns=       [SCSI] Maximum number of LUNs to probe.
                        Should be between 1 and 2^32-1.
 
        max_report_luns=
-                       [SCSI] Maximum number of LUNs received
+                       [SCSI] Maximum number of LUNs received.
                        Should be between 1 and 16384.
 
        mca-pentium     [BUGS=IA-32]
@@ -796,11 +809,11 @@ running once the system is up.
 
        md=             [HW] RAID subsystems devices and level
                        See Documentation/md.txt.
+
        mdacon=         [MDA]
                        Format: <first>,<last>
                        Specifies range of consoles to be captured by the MDA.
+
        mem=nn[KMG]     [KNL,BOOT] Force usage of a specific amount of memory
                        Amount of memory to be used when the kernel is not able
                        to see the whole system memory or for test.
@@ -851,15 +864,15 @@ running once the system is up.
        MTD_Partition=  [MTD]
                        Format: <name>,<region-number>,<size>,<offset>
 
-       MTD_Region=     [MTD]
-                       Format: <name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>]
+       MTD_Region=     [MTD] Format:
+                       <name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>]
 
        mtdparts=       [MTD]
                        See drivers/mtd/cmdline.c.
 
        mtouchusb.raw_coordinates=
-                       [HW] Make the MicroTouch USB driver use raw coordinates ('y', default)
-                       or cooked coordinates ('n')
+                       [HW] Make the MicroTouch USB driver use raw coordinates
+                       ('y', default) or cooked coordinates ('n')
 
        n2=             [NET] SDL Inc. RISCom/N2 synchronous serial card
 
@@ -880,7 +893,9 @@ running once the system is up.
                        Format: <irq>,<io>,<mem_start>,<mem_end>,<name>
                        Note that mem_start is often overloaded to mean
                        something different and driver-specific.
+                       This usage is only documented in each driver source
+                       file if at all.
+
        nfsaddrs=       [NFS]
                        See Documentation/nfsroot.txt.
 
@@ -893,8 +908,8 @@ running once the system is up.
                        emulation library even if a 387 maths coprocessor
                        is present.
 
-       noalign         [KNL,ARM] 
+       noalign         [KNL,ARM]
+
        noapic          [SMP,APIC] Tells the kernel to not make use of any
                        IOAPICs that may be present in the system.
 
@@ -905,19 +920,19 @@ running once the system is up.
                        on "Classic" PPC cores.
 
        nocache         [ARM]
+
        nodisconnect    [HW,SCSI,M68K] Disables SCSI disconnects.
 
        noexec          [IA-64]
 
-       noexec          [IA-32, X86-64]
+       noexec          [IA-32,X86-64]
                        noexec=on: enable non-executable mappings (default)
                        noexec=off: disable nn-executable mappings
 
        nofxsr          [BUGS=IA-32]
 
        nohlt           [BUGS=ARM]
+
        no-hlt          [BUGS=IA-32] Tells the kernel that the hlt
                        instruction doesn't work correctly and not to
                        use it.
@@ -948,8 +963,9 @@ running once the system is up.
 
        noresidual      [PPC] Don't use residual data on PReP machines.
 
-       noresume        [SWSUSP] Disables resume and restore original swap space.
+       noresume        [SWSUSP] Disables resume and restores original swap
+                       space.
+
        no-scroll       [VGA] Disables scrollback.
                        This is required for the Braillex ib80-piezo Braille
                        reader made by F.H. Papenmeier (Germany).
@@ -965,16 +981,16 @@ running once the system is up.
        nousb           [USB] Disable the USB subsystem
 
        nowb            [ARM]
+
        opl3=           [HW,OSS]
                        Format: <io>
 
        opl3sa=         [HW,OSS]
                        Format: <io>,<irq>,<dma>,<dma2>,<mpu_io>,<mpu_irq>
 
-       opl3sa2=        [HW,OSS]
-                       Format: <io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple]
+       opl3sa2=        [HW,OSS] Format:
+                       <io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple]
+
        oprofile.timer= [HW]
                        Use timer interrupt instead of performance counters
 
@@ -993,36 +1009,33 @@ running once the system is up.
                        Format: <parport#>
        parkbd.mode=    [HW] Parallel port keyboard adapter mode of operation,
                        0 for XT, 1 for AT (default is AT).
-                       Format: <mode> 
-
-       parport=0       [HW,PPT]        Specify parallel ports. 0 disables.
-       parport=auto                    Use 'auto' to force the driver to use
-       parport=0xBBB[,IRQ[,DMA]]       any IRQ/DMA settings detected (the
-                                       default is to ignore detected IRQ/DMA
-                                       settings because of possible
-                                       conflicts). You can specify the base
-                                       address, IRQ, and DMA settings; IRQ and
-                                       DMA should be numbers, or 'auto' (for
-                                       using detected settings on that
-                                       particular port), or 'nofifo' (to avoid
-                                       using a FIFO even if it is detected).
-                                       Parallel ports are assigned in the
-                                       order they are specified on the command
-                                       line, starting with parport0.
-
-       parport_init_mode=
-                       [HW,PPT]        Configure VIA parallel port to
-                                       operate in specific mode. This is
-                                       necessary on Pegasos computer where
-                                       firmware has no options for setting up
-                                       parallel port mode and sets it to
-                                       spp. Currently this function knows
-                                       686a and 8231 chips.
+                       Format: <mode>
+
+       parport=        [HW,PPT] Specify parallel ports. 0 disables.
+                       Format: { 0 | auto | 0xBBB[,IRQ[,DMA]] }
+                       Use 'auto' to force the driver to use any
+                       IRQ/DMA settings detected (the default is to
+                       ignore detected IRQ/DMA settings because of
+                       possible conflicts). You can specify the base
+                       address, IRQ, and DMA settings; IRQ and DMA
+                       should be numbers, or 'auto' (for using detected
+                       settings on that particular port), or 'nofifo'
+                       (to avoid using a FIFO even if it is detected).
+                       Parallel ports are assigned in the order they
+                       are specified on the command line, starting
+                       with parport0.
+
+       parport_init_mode=      [HW,PPT]
+                       Configure VIA parallel port to operate in
+                       a specific mode. This is necessary on Pegasos
+                       computer where firmware has no options for setting
+                       up parallel port mode and sets it to spp.
+                       Currently this function knows 686a and 8231 chips.
                        Format: [spp|ps2|epp|ecp|ecpepp]
 
-       pas2=           [HW,OSS]
-                       Format: <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16>
+       pas2=           [HW,OSS] Format:
+                       <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16>
+
        pas16=          [HW,SCSI]
                        See header of drivers/scsi/pas16.c.
 
@@ -1032,64 +1045,67 @@ running once the system is up.
                        See header of drivers/block/paride/pcd.c.
                        See also Documentation/paride.txt.
 
-       pci=option[,option...]          [PCI] various PCI subsystem options:
-               off                     [IA-32] don't probe for the PCI bus
-               bios                    [IA-32] force use of PCI BIOS, don't access
-                                       the hardware directly. Use this if your machine
-                                       has a non-standard PCI host bridge.
-               nobios                  [IA-32] disallow use of PCI BIOS, only direct
-                                       hardware access methods are allowed. Use this
-                                       if you experience crashes upon bootup and you
-                                       suspect they are caused by the BIOS.
-               conf1                   [IA-32] Force use of PCI Configuration Mechanism 1.
-               conf2                   [IA-32] Force use of PCI Configuration Mechanism 2.
-               nosort                  [IA-32] Don't sort PCI devices according to
-                                       order given by the PCI BIOS. This sorting is done
-                                       to get a device order compatible with older kernels.
-               biosirq                 [IA-32] Use PCI BIOS calls to get the interrupt
-                                       routing table. These calls are known to be buggy
-                                       on several machines and they hang the machine when used,
-                                       but on other computers it's the only way to get the
-                                       interrupt routing table. Try this option if the kernel
-                                       is unable to allocate IRQs or discover secondary PCI
-                                       buses on your motherboard.
-               rom                     [IA-32] Assign address space to expansion ROMs.
-                                       Use with caution as certain devices share address
-                                       decoders between ROMs and other resources.
-               irqmask=0xMMMM          [IA-32] Set a bit mask of IRQs allowed to be assigned
-                                       automatically to PCI devices. You can make the kernel
-                                       exclude IRQs of your ISA cards this way.
+       pci=option[,option...]  [PCI] various PCI subsystem options:
+               off             [IA-32] don't probe for the PCI bus
+               bios            [IA-32] force use of PCI BIOS, don't access
+                               the hardware directly. Use this if your machine
+                               has a non-standard PCI host bridge.
+               nobios          [IA-32] disallow use of PCI BIOS, only direct
+                               hardware access methods are allowed. Use this
+                               if you experience crashes upon bootup and you
+                               suspect they are caused by the BIOS.
+               conf1           [IA-32] Force use of PCI Configuration
+                               Mechanism 1.
+               conf2           [IA-32] Force use of PCI Configuration
+                               Mechanism 2.
+               nosort          [IA-32] Don't sort PCI devices according to
+                               order given by the PCI BIOS. This sorting is
+                               done to get a device order compatible with
+                               older kernels.
+               biosirq         [IA-32] Use PCI BIOS calls to get the interrupt
+                               routing table. These calls are known to be buggy
+                               on several machines and they hang the machine
+                               when used, but on other computers it's the only
+                               way to get the interrupt routing table. Try
+                               this option if the kernel is unable to allocate
+                               IRQs or discover secondary PCI buses on your
+                               motherboard.
+               rom             [IA-32] Assign address space to expansion ROMs.
+                               Use with caution as certain devices share
+                               address decoders between ROMs and other
+                               resources.
+               irqmask=0xMMMM  [IA-32] Set a bit mask of IRQs allowed to be
+                               assigned automatically to PCI devices. You can
+                               make the kernel exclude IRQs of your ISA cards
+                               this way.
                pirqaddr=0xAAAAA        [IA-32] Specify the physical address
-                                       of the PIRQ table (normally generated
-                                       by the BIOS) if it is outside the
-                                       F0000h-100000h range.
-               lastbus=N               [IA-32] Scan all buses till bus #N. Can be useful
-                                       if the kernel is unable to find your secondary buses
-                                       and you want to tell it explicitly which ones they are.
-               assign-busses           [IA-32] Always assign all PCI bus
-                                       numbers ourselves, overriding
-                                       whatever the firmware may have
-                                       done.
-               usepirqmask             [IA-32] Honor the possible IRQ mask
-                                       stored in the BIOS $PIR table. This is
-                                       needed on some systems with broken
-                                       BIOSes, notably some HP Pavilion N5400
-                                       and Omnibook XE3 notebooks. This will
-                                       have no effect if ACPI IRQ routing is
-                                       enabled.
-               noacpi                  [IA-32] Do not use ACPI for IRQ routing
-                                       or for PCI scanning.
-               routeirq                Do IRQ routing for all PCI devices.
-                                       This is normally done in pci_enable_device(),
-                                       so this option is a temporary workaround
-                                       for broken drivers that don't call it.
-
-               firmware                [ARM] Do not re-enumerate the bus but
-                                       instead just use the configuration
-                                       from the bootloader. This is currently
-                                       used on IXP2000 systems where the
-                                       bus has to be configured a certain way
-                                       for adjunct CPUs.
+                               of the PIRQ table (normally generated
+                               by the BIOS) if it is outside the
+                               F0000h-100000h range.
+               lastbus=N       [IA-32] Scan all buses thru bus #N. Can be
+                               useful if the kernel is unable to find your
+                               secondary buses and you want to tell it
+                               explicitly which ones they are.
+               assign-busses   [IA-32] Always assign all PCI bus
+                               numbers ourselves, overriding
+                               whatever the firmware may have done.
+               usepirqmask     [IA-32] Honor the possible IRQ mask stored
+                               in the BIOS $PIR table. This is needed on
+                               some systems with broken BIOSes, notably
+                               some HP Pavilion N5400 and Omnibook XE3
+                               notebooks. This will have no effect if ACPI
+                               IRQ routing is enabled.
+               noacpi          [IA-32] Do not use ACPI for IRQ routing
+                               or for PCI scanning.
+               routeirq        Do IRQ routing for all PCI devices.
+                               This is normally done in pci_enable_device(),
+                               so this option is a temporary workaround
+                               for broken drivers that don't call it.
+               firmware        [ARM] Do not re-enumerate the bus but instead
+                               just use the configuration from the
+                               bootloader. This is currently used on
+                               IXP2000 systems where the bus has to be
+                               configured a certain way for adjunct CPUs.
 
        pcmv=           [HW,PCMCIA] BadgePAD 4
 
@@ -1127,19 +1143,20 @@ running once the system is up.
                        [ISAPNP] Exclude DMAs for the autoconfiguration
 
        pnp_reserve_io= [ISAPNP] Exclude I/O ports for the autoconfiguration
-                       Ranges are in pairs (I/O port base and size).
+                       Ranges are in pairs (I/O port base and size).
 
        pnp_reserve_mem=
-                       [ISAPNP] Exclude memory regions for the autoconfiguration
+                       [ISAPNP] Exclude memory regions for the
+                       autoconfiguration.
                        Ranges are in pairs (memory base and size).
 
        profile=        [KNL] Enable kernel profiling via /proc/profile
-                       { schedule | <number> }
-                       (param: schedule - profile schedule points}
-                       (param: profile step/bucket size as a power of 2 for
-                               statistical time based profiling)
+                       Format: [schedule,]<number>
+                       Param: "schedule" - profile schedule points.
+                       Param: <number> - step/bucket size as a power of 2 for
+                               statistical time based profiling.
 
-       processor.max_cstate=   [HW, ACPI]
+       processor.max_cstate=   [HW,ACPI]
                        Limit processor to maximum C-state
                        max_cstate=9 overrides any DMI blacklist limit.
 
@@ -1147,27 +1164,28 @@ running once the system is up.
                        before loading.
                        See Documentation/ramdisk.txt.
 
-       psmouse.proto=  [HW,MOUSE] Highest PS2 mouse protocol extension to
-                       probe for (bare|imps|exps|lifebook|any).
+       psmouse.proto=  [HW,MOUSE] Highest PS2 mouse protocol extension to
+                       probe for; one of (bare|imps|exps|lifebook|any).
        psmouse.rate=   [HW,MOUSE] Set desired mouse report rate, in reports
                        per second.
-       psmouse.resetafter=
-                       [HW,MOUSE] Try to reset the device after so many bad packets
+       psmouse.resetafter=     [HW,MOUSE]
+                       Try to reset the device after so many bad packets
                        (0 = never).
        psmouse.resolution=
                        [HW,MOUSE] Set desired mouse resolution, in dpi.
        psmouse.smartscroll=
-                       [HW,MOUSE] Controls Logitech smartscroll autorepeat,
+                       [HW,MOUSE] Controls Logitech smartscroll autorepeat.
                        0 = disabled, 1 = enabled (default).
 
        pss=            [HW,OSS] Personal Sound System (ECHO ESC614)
-                       Format: <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>
+                       Format:
+                       <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>
 
        pt.             [PARIDE]
                        See Documentation/paride.txt.
 
        quiet=          [KNL] Disable log messages
+
        r128=           [HW,DRM]
 
        raid=           [HW,RAID]
@@ -1176,10 +1194,9 @@ running once the system is up.
        ramdisk=        [RAM] Sizes of RAM disks in kilobytes [deprecated]
                        See Documentation/ramdisk.txt.
 
-       ramdisk_blocksize=
-                       [RAM]
+       ramdisk_blocksize=      [RAM]
                        See Documentation/ramdisk.txt.
+
        ramdisk_size=   [RAM] Sizes of RAM disks in kilobytes
                        New name for the ramdisk parameter.
                        See Documentation/ramdisk.txt.
@@ -1195,7 +1212,8 @@ running once the system is up.
 
        reserve=        [KNL,BUGS] Force the kernel to ignore some iomem area
 
-       resume=         [SWSUSP] Specify the partition device for software suspension
+       resume=         [SWSUSP]
+                       Specify the partition device for software suspend
 
        rhash_entries=  [KNL,NET]
                        Set number of hash buckets for route cache
@@ -1225,7 +1243,7 @@ running once the system is up.
                        Format: <io>,<irq>,<dma>,<dma2>
 
        sbni=           [NET] Granch SBNI12 leased line adapter
+
        sbpcd=          [HW,CD] Soundblaster CD adapter
                        Format: <io>,<type>
                        See a comment before function sbpcd_setup() in
@@ -1258,21 +1276,20 @@ running once the system is up.
 
        serialnumber    [BUGS=IA-32]
 
-       sg_def_reserved_size=
-                       [SCSI]
+       sg_def_reserved_size=   [SCSI]
+
        sgalaxy=        [HW,OSS]
                        Format: <io>,<irq>,<dma>,<dma2>,<sgbase>
 
        shapers=        [NET]
                        Maximal number of shapers.
+
        sim710=         [SCSI,HW]
                        See header of drivers/scsi/sim710.c.
 
        simeth=         [IA-64]
        simscsi=
+
        sjcd=           [HW,CD]
                        Format: <io>,<irq>,<dma>
                        See header of drivers/cdrom/sjcd.c.
@@ -1403,10 +1420,10 @@ running once the system is up.
        snd-wavefront=  [HW,ALSA]
 
        snd-ymfpci=     [HW,ALSA]
+
        sonicvibes=     [HW,OSS]
                        Format: <reverb>
+
        sonycd535=      [HW,CD]
                        Format: <io>[,<irq>]
 
@@ -1423,7 +1440,7 @@ running once the system is up.
 
        sscape=         [HW,OSS]
                        Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq>
+
        st=             [HW,SCSI] SCSI tape parameters (buffers, etc.)
                        See Documentation/scsi/st.txt.
 
@@ -1446,7 +1463,7 @@ running once the system is up.
        stram_swap=     [HW,M68k]
 
        swiotlb=        [IA-64] Number of I/O TLB slabs
+
        switches=       [HW,M68k]
 
        sym53c416=      [HW,SCSI]
@@ -1479,14 +1496,16 @@ running once the system is up.
        tp720=          [HW,PS2]
 
        trix=           [HW,OSS] MediaTrix AudioTrix Pro
-                       Format: <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
+                       Format:
+                       <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
+
        tsdev.xres=     [TS] Horizontal screen resolution.
        tsdev.yres=     [TS] Vertical screen resolution.
 
-       turbografx.map[2|3]=
-                       [HW,JOY] TurboGraFX parallel port interface
-                       Format: <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7>
+       turbografx.map[2|3]=    [HW,JOY]
+                       TurboGraFX parallel port interface
+                       Format:
+                       <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7>
                        See also Documentation/input/joystick-parport.txt
 
        u14-34f=        [HW,SCSI] UltraStor 14F/34F SCSI host adapter
@@ -1502,17 +1521,18 @@ running once the system is up.
 
        usbhid.mousepoll=
                        [USBHID] The interval which mice are to be polled at.
+
        video=          [FB] Frame buffer configuration
                        See Documentation/fb/modedb.txt.
 
        vga=            [BOOT,IA-32] Select a particular video mode
-                       See Documentation/i386/boot.txt and Documentation/svga.txt.
+                       See Documentation/i386/boot.txt and
+                       Documentation/svga.txt.
                        Use vga=ask for menu.
                        This is actually a boot loader parameter; the value is
                        passed to the kernel using a special protocol.
 
-       vmalloc=nn[KMG] [KNL,BOOT] forces the vmalloc area to have an exact
+       vmalloc=nn[KMG] [KNL,BOOT] Forces the vmalloc area to have an exact
                        size of <nn>. This can be used to increase the
                        minimum size (128MB on x86). It can also be used to
                        decrease the size and leave more room for directly
@@ -1520,11 +1540,11 @@ running once the system is up.
 
        vmhalt=         [KNL,S390]
 
-       vmpoff=         [KNL,S390] 
+       vmpoff=         [KNL,S390]
+
        waveartist=     [HW,OSS]
                        Format: <io>,<irq>,<dma>,<dma2>
+
        wd33c93=        [HW,SCSI]
                        See header of drivers/scsi/wd33c93.c.
 
@@ -1538,21 +1558,25 @@ running once the system is up.
        xd_geo=         See header of drivers/block/xd.c.
 
        xirc2ps_cs=     [NET,PCMCIA]
-                       Format: <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
-
+                       Format:
+                       <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
 
 
+______________________________________________________________________
 Changelog:
 
+2000-06-??     Mr. Unknown
        The last known update (for 2.4.0) - the changelog was not kept before.
-       2000-06-??      Mr. Unknown
 
+2002-11-24     Petr Baudis <pasky@ucw.cz>
+               Randy Dunlap <randy.dunlap@verizon.net>
        Update for 2.5.49, description for most of the options introduced,
        references to other documentation (C files, READMEs, ..), added S390,
        PPC, SPARC, MTD, ALSA and OSS category. Minor corrections and
        reformatting.
-       2002-11-24      Petr Baudis <pasky@ucw.cz>
-                       Randy Dunlap <randy.dunlap@verizon.net>
+
+2005-10-19     Randy Dunlap <rdunlap@xenotime.net>
+       Lots of typos, whitespace, some reformatting.
 
 TODO:
 
index 850538fadece0f8ad54e263a15e2ffc63f5fcd9d..370df113dc066433640874481e7d055a931a7f39 100644 (file)
@@ -488,6 +488,7 @@ static int is_pxafb_device(struct device * dev, void * data)
 
 unsigned long spitz_get_hsync_len(void)
 {
+#ifdef CONFIG_FB_PXA
        if (!spitz_pxafb_dev) {
                spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
                if (!spitz_pxafb_dev)
@@ -496,6 +497,7 @@ unsigned long spitz_get_hsync_len(void)
        if (!get_hsync_time)
                get_hsync_time = symbol_get(pxafb_get_hsync_time);
        if (!get_hsync_time)
+#endif
                return 0;
 
        return pxafb_get_hsync_time(spitz_pxafb_dev);
index cc262a05ddb4558499d649cf9c46d7610230f31f..5f5bc73754d9836da588fa20c04b5866b5cd2b6c 100644 (file)
@@ -506,8 +506,8 @@ struct mpic * __init mpic_alloc(unsigned long phys_addr,
        mpic->senses_count = senses_count;
 
        /* Map the global registers */
-       mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x1000);
-       mpic->tmregs = mpic->gregs + (MPIC_TIMER_BASE >> 2);
+       mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x2000);
+       mpic->tmregs = mpic->gregs + ((MPIC_TIMER_BASE - MPIC_GREG_BASE) >> 2);
        BUG_ON(mpic->gregs == NULL);
 
        /* Reset */
index e2bd6bae8b8aea0142d8fddb7eed0efe8cfcf672..243fed44d780693ca0c0e374605443ac1ef53742 100644 (file)
@@ -4,7 +4,7 @@
 #include <kern_constants.h>
 
 #define TASK_DEBUGREGS(task) ((unsigned long *) &(((char *) (task))[HOST_TASK_DEBUGREGS]))
-#ifdef CONFIG_MODE_TT
+#ifdef UML_CONFIG_MODE_TT
 #define TASK_EXTERN_PID(task) *((int *) &(((char *) (task))[HOST_TASK_EXTERN_PID]))
 #endif
 
index 6a76a7f3683ff1a821a59101c8162058b339b677..cbef3e1697f41f444fa61dc1bf17e039ee43abc7 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <kern_constants.h>
 
-#ifdef CONFIG_MODE_TT
+#ifdef UML_CONFIG_MODE_TT
 #define TASK_EXTERN_PID(task) *((int *) &(((char *) (task))[HOST_TASK_EXTERN_PID]))
 #endif
 
index 6d9080a3ca7e97fefb3302959bb445ce3dc0aac0..12ef13ff04ca1a8b71a72871dbbf22b585f3af6c 100644 (file)
@@ -1133,10 +1133,10 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
                ring_start = (dev_priv->cp_ring->offset
                              - dev->agp->base
                              + dev_priv->gart_vm_start);
-       } else
+       } else
 #endif
                ring_start = (dev_priv->cp_ring->offset
-                             - dev->sg->handle
+                             - (unsigned long)dev->sg->virtual
                              + dev_priv->gart_vm_start);
 
        RADEON_WRITE( RADEON_CP_RB_BASE, ring_start );
@@ -1164,7 +1164,8 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
                drm_sg_mem_t *entry = dev->sg;
                unsigned long tmp_ofs, page_ofs;
 
-               tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle;
+               tmp_ofs = dev_priv->ring_rptr->offset -
+                               (unsigned long)dev->sg->virtual;
                page_ofs = tmp_ofs >> PAGE_SHIFT;
 
                RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR,
@@ -1491,8 +1492,8 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
        else
 #endif
                dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset
-                                               - dev->sg->handle
-                                               + dev_priv->gart_vm_start);
+                                       - (unsigned long)dev->sg->virtual
+                                       + dev_priv->gart_vm_start);
 
        DRM_DEBUG( "dev_priv->gart_size %d\n",
                   dev_priv->gart_size );
index c81fa8e975ef1c8a2fd611bd0b37aa9671a815e1..8dfafda5ed241c9c4269877704981f21f020673d 100644 (file)
@@ -396,20 +396,21 @@ static irqreturn_t mthca_tavor_interrupt(int irq, void *dev_ptr, struct pt_regs
                writel(dev->eq_table.clr_mask, dev->eq_table.clr_int);
 
        ecr = readl(dev->eq_regs.tavor.ecr_base + 4);
-       if (ecr) {
-               writel(ecr, dev->eq_regs.tavor.ecr_base +
-                      MTHCA_ECR_CLR_BASE - MTHCA_ECR_BASE + 4);
+       if (!ecr)
+               return IRQ_NONE;
 
-               for (i = 0; i < MTHCA_NUM_EQ; ++i)
-                       if (ecr & dev->eq_table.eq[i].eqn_mask &&
-                           mthca_eq_int(dev, &dev->eq_table.eq[i])) {
+       writel(ecr, dev->eq_regs.tavor.ecr_base +
+              MTHCA_ECR_CLR_BASE - MTHCA_ECR_BASE + 4);
+
+       for (i = 0; i < MTHCA_NUM_EQ; ++i)
+               if (ecr & dev->eq_table.eq[i].eqn_mask) {
+                       if (mthca_eq_int(dev, &dev->eq_table.eq[i]))
                                tavor_set_eq_ci(dev, &dev->eq_table.eq[i],
                                                dev->eq_table.eq[i].cons_index);
-                               tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn);
-                       }
-       }
+                       tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn);
+               }
 
-       return IRQ_RETVAL(ecr);
+       return IRQ_HANDLED;
 }
 
 static irqreturn_t mthca_tavor_msi_x_interrupt(int irq, void *eq_ptr,
index e9476075aa13df5c098a776027fd4aa4dfcb18ed..2a8a5696bf8aec3ad18647347500c9a519f43e17 100644 (file)
@@ -3568,7 +3568,8 @@ static void md_do_sync(mddev_t *mddev)
                mddev->curr_resync = 2;
 
        try_again:
-               if (signal_pending(current)) {
+               if (signal_pending(current) ||
+                   kthread_should_stop()) {
                        flush_signals(current);
                        set_bit(MD_RECOVERY_INTR, &mddev->recovery);
                        goto skip;
@@ -3590,8 +3591,9 @@ static void md_do_sync(mddev_t *mddev)
                                         */
                                        continue;
                                prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE);
-                               if (!signal_pending(current)
-                                   && mddev2->curr_resync >= mddev->curr_resync) {
+                               if (!signal_pending(current) &&
+                                   !kthread_should_stop() &&
+                                   mddev2->curr_resync >= mddev->curr_resync) {
                                        printk(KERN_INFO "md: delaying resync of %s"
                                               " until %s has finished resync (they"
                                               " share one or more physical units)\n",
@@ -3697,7 +3699,7 @@ static void md_do_sync(mddev_t *mddev)
                }
 
 
-               if (signal_pending(current)) {
+               if (signal_pending(current) || kthread_should_stop()) {
                        /*
                         * got a signal, exit.
                         */
index 93570355819aefd3c36cc35f25343f24370d9a36..bbb989df4cf05dbfd62a883a2d539a443cd0ae30 100644 (file)
@@ -262,7 +262,6 @@ config VIDEO_SAA7134_DVB
        depends on VIDEO_SAA7134 && DVB_CORE
        select VIDEO_BUF_DVB
        select DVB_MT352
-       select DVB_CX22702
        select DVB_TDA1004X
        ---help---
          This adds support for DVB cards based on the
index a6a630a950d09ce4cfa43f3f6f444e80d4f2f6ca..7992bc8cc6a4dde4593abbb10d06167bc00309fe 100644 (file)
@@ -241,7 +241,8 @@ static void __devinit quirk_s3_64M(struct pci_dev *dev)
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3,     PCI_DEVICE_ID_S3_868,           quirk_s3_64M );
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3,     PCI_DEVICE_ID_S3_968,           quirk_s3_64M );
 
-static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, unsigned size, int nr)
+static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region,
+       unsigned size, int nr, const char *name)
 {
        region &= ~(size-1);
        if (region) {
@@ -259,6 +260,7 @@ static void __devinit quirk_io_region(struct pci_dev *dev, unsigned region, unsi
                pcibios_bus_to_resource(dev, res, &bus_region);
 
                pci_claim_resource(dev, nr);
+               printk("PCI quirk: region %04x-%04x claimed by %s\n", region, region + size - 1, name);
        }
 }      
 
@@ -291,25 +293,98 @@ static void __devinit quirk_ali7101_acpi(struct pci_dev *dev)
        u16 region;
 
        pci_read_config_word(dev, 0xE0, &region);
-       quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES);
+       quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES, "ali7101 ACPI");
        pci_read_config_word(dev, 0xE2, &region);
-       quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1);
+       quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1, "ali7101 SMB");
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AL,     PCI_DEVICE_ID_AL_M7101,         quirk_ali7101_acpi );
 
+static void piix4_io_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable)
+{
+       u32 devres;
+       u32 mask, size, base;
+
+       pci_read_config_dword(dev, port, &devres);
+       if ((devres & enable) != enable)
+               return;
+       mask = (devres >> 16) & 15;
+       base = devres & 0xffff;
+       size = 16;
+       for (;;) {
+               unsigned bit = size >> 1;
+               if ((bit & mask) == bit)
+                       break;
+               size = bit;
+       }
+       /*
+        * For now we only print it out. Eventually we'll want to
+        * reserve it (at least if it's in the 0x1000+ range), but
+        * let's get enough confirmation reports first. 
+        */
+       base &= -size;
+       printk("%s PIO at %04x-%04x\n", name, base, base + size - 1);
+}
+
+static void piix4_mem_quirk(struct pci_dev *dev, const char *name, unsigned int port, unsigned int enable)
+{
+       u32 devres;
+       u32 mask, size, base;
+
+       pci_read_config_dword(dev, port, &devres);
+       if ((devres & enable) != enable)
+               return;
+       base = devres & 0xffff0000;
+       mask = (devres & 0x3f) << 16;
+       size = 128 << 16;
+       for (;;) {
+               unsigned bit = size >> 1;
+               if ((bit & mask) == bit)
+                       break;
+               size = bit;
+       }
+       /*
+        * For now we only print it out. Eventually we'll want to
+        * reserve it, but let's get enough confirmation reports first. 
+        */
+       base &= -size;
+       printk("%s MMIO at %04x-%04x\n", name, base, base + size - 1);
+}
+
 /*
  * PIIX4 ACPI: Two IO regions pointed to by longwords at
  *     0x40 (64 bytes of ACPI registers)
  *     0x90 (32 bytes of SMB registers)
+ * and a few strange programmable PIIX4 device resources.
  */
 static void __devinit quirk_piix4_acpi(struct pci_dev *dev)
 {
-       u32 region;
+       u32 region, res_a;
 
        pci_read_config_dword(dev, 0x40, &region);
-       quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES);
+       quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES, "PIIX4 ACPI");
        pci_read_config_dword(dev, 0x90, &region);
-       quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1);
+       quirk_io_region(dev, region, 32, PCI_BRIDGE_RESOURCES+1, "PIIX4 SMB");
+
+       /* Device resource A has enables for some of the other ones */
+       pci_read_config_dword(dev, 0x5c, &res_a);
+
+       piix4_io_quirk(dev, "PIIX4 devres B", 0x60, 3 << 21);
+       piix4_io_quirk(dev, "PIIX4 devres C", 0x64, 3 << 21);
+
+       /* Device resource D is just bitfields for static resources */
+
+       /* Device 12 enabled? */
+       if (res_a & (1 << 29)) {
+               piix4_io_quirk(dev, "PIIX4 devres E", 0x68, 1 << 20);
+               piix4_mem_quirk(dev, "PIIX4 devres F", 0x6c, 1 << 7);
+       }
+       /* Device 13 enabled? */
+       if (res_a & (1 << 30)) {
+               piix4_io_quirk(dev, "PIIX4 devres G", 0x70, 1 << 20);
+               piix4_mem_quirk(dev, "PIIX4 devres H", 0x74, 1 << 7);
+       }
+       piix4_io_quirk(dev, "PIIX4 devres I", 0x78, 1 << 20);
+       piix4_io_quirk(dev, "PIIX4 devres J", 0x7c, 1 << 20);
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_82371AB_3,  quirk_piix4_acpi );
 
@@ -323,10 +398,10 @@ static void __devinit quirk_ich4_lpc_acpi(struct pci_dev *dev)
        u32 region;
 
        pci_read_config_dword(dev, 0x40, &region);
-       quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES);
+       quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES, "ICH4 ACPI/GPIO/TCO");
 
        pci_read_config_dword(dev, 0x58, &region);
-       quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1);
+       quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1, "ICH4 GPIO");
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801AA_0,                quirk_ich4_lpc_acpi );
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801AB_0,                quirk_ich4_lpc_acpi );
@@ -352,7 +427,7 @@ static void __devinit quirk_vt82c586_acpi(struct pci_dev *dev)
        if (rev & 0x10) {
                pci_read_config_dword(dev, 0x48, &region);
                region &= PCI_BASE_ADDRESS_IO_MASK;
-               quirk_io_region(dev, region, 256, PCI_BRIDGE_RESOURCES);
+               quirk_io_region(dev, region, 256, PCI_BRIDGE_RESOURCES, "vt82c586 ACPI");
        }
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,    PCI_DEVICE_ID_VIA_82C586_3,     quirk_vt82c586_acpi );
@@ -372,11 +447,11 @@ static void __devinit quirk_vt82c686_acpi(struct pci_dev *dev)
 
        pci_read_config_word(dev, 0x70, &hm);
        hm &= PCI_BASE_ADDRESS_IO_MASK;
-       quirk_io_region(dev, hm, 128, PCI_BRIDGE_RESOURCES + 1);
+       quirk_io_region(dev, hm, 128, PCI_BRIDGE_RESOURCES + 1, "vt82c868 HW-mon");
 
        pci_read_config_dword(dev, 0x90, &smb);
        smb &= PCI_BASE_ADDRESS_IO_MASK;
-       quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 2);
+       quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 2, "vt82c868 SMB");
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,    PCI_DEVICE_ID_VIA_82C686_4,     quirk_vt82c686_acpi );
 
@@ -391,11 +466,11 @@ static void __devinit quirk_vt8235_acpi(struct pci_dev *dev)
 
        pci_read_config_word(dev, 0x88, &pm);
        pm &= PCI_BASE_ADDRESS_IO_MASK;
-       quirk_io_region(dev, pm, 128, PCI_BRIDGE_RESOURCES);
+       quirk_io_region(dev, pm, 128, PCI_BRIDGE_RESOURCES, "vt8235 PM");
 
        pci_read_config_word(dev, 0xd0, &smb);
        smb &= PCI_BASE_ADDRESS_IO_MASK;
-       quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 1);
+       quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 1, "vt8235 SMB");
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,    PCI_DEVICE_ID_VIA_8235, quirk_vt8235_acpi);
 
index 657be948baf71fa38d494b957e7e375153192340..28ce3a7ee43450db799dd4bd7a007bcd2d7942ad 100644 (file)
@@ -40,7 +40,7 @@
  * FIXME: IO should be max 256 bytes.  However, since we may
  * have a P2P bridge below a cardbus bridge, we need 4K.
  */
-#define CARDBUS_IO_SIZE                (4*1024)
+#define CARDBUS_IO_SIZE                (256)
 #define CARDBUS_MEM_SIZE       (32*1024*1024)
 
 static void __devinit
index d40ba0bd68a3b776699f62ff56e9b9ba89059950..23392ae7df8b319984fa0fd5d569e92422a72aab 100644 (file)
@@ -91,7 +91,7 @@
 #ifndef NDEBUG
 #define NDEBUG 0
 #endif
-#ifndef NDEBUG
+#ifndef NDEBUG_ABORT
 #define NDEBUG_ABORT 0
 #endif
 
index 4a99d2f000f4a952a720ce0e7866b406c255ba09..d54b1cc88d0d9cf67ec56e48ea8a3efc9cd7ffc5 100644 (file)
@@ -19,7 +19,7 @@
 #define AAC_MAX_LUN            (8)
 
 #define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff)
-#define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)512)
+#define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)256)
 
 /*
  * These macros convert from physical channels to virtual channels
index 8982978c42fdfa4f780bf454bac3e8f8d4de0507..7aec93f9d4231689b33ce9c450629904f3432807 100644 (file)
@@ -1325,6 +1325,8 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
        ha->brd_info = brd_info;
        sprintf(ha->host_str, "%s_%ld", ha->brd_info->drv_name, ha->host_no);
 
+       ha->dpc_pid = -1;
+
        /* Configure PCI I/O space */
        ret = qla2x00_iospace_config(ha);
        if (ret)
@@ -1448,7 +1450,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
         */
        spin_lock_init(&ha->mbx_reg_lock);
 
-       ha->dpc_pid = -1;
        init_completion(&ha->dpc_inited);
        init_completion(&ha->dpc_exited);
 
index 64fc9e21f35b1ca9987e98a713058a911d8f2b77..e69477d1889bd8e6ab67f862f99d9c3ccc8de7af 100644 (file)
@@ -185,6 +185,7 @@ static struct {
        {"PIONEER", "CD-ROM DRM-600", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
        {"PIONEER", "CD-ROM DRM-602X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
        {"PIONEER", "CD-ROM DRM-604X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
+       {"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
        {"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN},
        {"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN},
        {"SEAGATE", "ST34555N", "0930", BLIST_NOTQ},    /* Chokes on tagged INQUIRY */
index dc9c772bc874073b9d6fa38fda47a12faf7c463b..0074f28c37b2719e49388a0da93f6a9a87505a82 100644 (file)
@@ -97,7 +97,6 @@ int scsi_insert_special_req(struct scsi_request *sreq, int at_head)
 }
 
 static void scsi_run_queue(struct request_queue *q);
-static void scsi_release_buffers(struct scsi_cmnd *cmd);
 
 /*
  * Function:   scsi_unprep_request()
@@ -1040,8 +1039,10 @@ static int scsi_init_io(struct scsi_cmnd *cmd)
         * if sg table allocation fails, requeue request later.
         */
        sgpnt = scsi_alloc_sgtable(cmd, GFP_ATOMIC);
-       if (unlikely(!sgpnt))
+       if (unlikely(!sgpnt)) {
+               scsi_unprep_request(req);
                return BLKPREP_DEFER;
+       }
 
        cmd->request_buffer = (char *) sgpnt;
        cmd->request_bufflen = req->nr_sectors << 9;
@@ -1245,8 +1246,8 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
                 */
                ret = scsi_init_io(cmd);
                switch(ret) {
+                       /* For BLKPREP_KILL/DEFER the cmd was released */
                case BLKPREP_KILL:
-                       /* BLKPREP_KILL return also releases the command */
                        goto kill;
                case BLKPREP_DEFER:
                        goto defer;
index 2cab556b6e82afa886203254b16024783e47f8c5..771e97ef136e8ad3c27f08eab77c76de77b8a2ac 100644 (file)
@@ -819,12 +819,15 @@ show_fc_private_host_tgtid_bind_type(struct class_device *cdev, char *buf)
        return snprintf(buf, FC_BINDTYPE_MAX_NAMELEN, "%s\n", name);
 }
 
+#define get_list_head_entry(pos, head, member)                 \
+       pos = list_entry((head)->next, typeof(*pos), member)
+
 static ssize_t
 store_fc_private_host_tgtid_bind_type(struct class_device *cdev,
        const char *buf, size_t count)
 {
        struct Scsi_Host *shost = transport_class_to_shost(cdev);
-       struct fc_rport *rport, *next_rport;
+       struct fc_rport *rport;
        enum fc_tgtid_binding_type val;
        unsigned long flags;
 
@@ -834,9 +837,13 @@ store_fc_private_host_tgtid_bind_type(struct class_device *cdev,
        /* if changing bind type, purge all unused consistent bindings */
        if (val != fc_host_tgtid_bind_type(shost)) {
                spin_lock_irqsave(shost->host_lock, flags);
-               list_for_each_entry_safe(rport, next_rport,
-                               &fc_host_rport_bindings(shost), peers)
+               while (!list_empty(&fc_host_rport_bindings(shost))) {
+                       get_list_head_entry(rport,
+                               &fc_host_rport_bindings(shost), peers);
+                       spin_unlock_irqrestore(shost->host_lock, flags);
                        fc_rport_terminate(rport);
+                       spin_lock_irqsave(shost->host_lock, flags);
+               }
                spin_unlock_irqrestore(shost->host_lock, flags);
        }
 
index 0e21f583690ebdeffa57f316bd8fba2c67da8e71..5c3c03932d6d45663bb39e790d565f9c6623f934 100644 (file)
@@ -152,6 +152,7 @@ static int __devinit pci_hp_diva_init(struct pci_dev *dev)
                rc = 4;
                break;
        case PCI_DEVICE_ID_HP_DIVA_POWERBAR:
+       case PCI_DEVICE_ID_HP_DIVA_HURRICANE:
                rc = 1;
                break;
        }
@@ -226,8 +227,10 @@ static int __devinit pci_plx9050_init(struct pci_dev *dev)
        }
 
        irq_config = 0x41;
-       if (dev->vendor == PCI_VENDOR_ID_PANACOM)
+       if (dev->vendor == PCI_VENDOR_ID_PANACOM ||
+           dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS) {
                irq_config = 0x43;
+       }
        if ((dev->vendor == PCI_VENDOR_ID_PLX) &&
            (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) {
                /*
@@ -661,6 +664,15 @@ static struct pci_serial_quirk pci_serial_quirks[] = {
        /*
         * PLX
         */
+       {
+               .vendor         = PCI_VENDOR_ID_PLX,
+               .device         = PCI_DEVICE_ID_PLX_9050,
+               .subvendor      = PCI_SUBVENDOR_ID_EXSYS,
+               .subdevice      = PCI_SUBDEVICE_ID_EXSYS_4055,
+               .init           = pci_plx9050_init,
+               .setup          = pci_default_setup,
+               .exit           = __devexit_p(pci_plx9050_exit),
+       },
        {
                .vendor         = PCI_VENDOR_ID_PLX,
                .device         = PCI_DEVICE_ID_PLX_9050,
@@ -927,6 +939,7 @@ enum pci_board_num_t {
        pbn_panacom,
        pbn_panacom2,
        pbn_panacom4,
+       pbn_exsys_4055,
        pbn_plx_romulus,
        pbn_oxsemi,
        pbn_intel_i960,
@@ -1292,6 +1305,13 @@ static struct pciserial_board pci_boards[] __devinitdata = {
                .reg_shift      = 7,
        },
 
+       [pbn_exsys_4055] = {
+               .flags          = FL_BASE2,
+               .num_ports      = 4,
+               .base_baud      = 115200,
+               .uart_offset    = 8,
+       },
+
        /* I think this entry is broken - the first_offset looks wrong --rmk */
        [pbn_plx_romulus] = {
                .flags          = FL_BASE2,
@@ -1853,6 +1873,10 @@ static struct pci_device_id serial_pci_tbl[] = {
                PCI_SUBVENDOR_ID_CHASE_PCIRAS,
                PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, 
                pbn_b2_8_460800 },
+       {       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
+               PCI_SUBVENDOR_ID_EXSYS,
+               PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
+               pbn_exsys_4055 },
        /*
         * Megawolf Romulus PCI Serial Card, from Mike Hudson
         * (Exoray@isys.ca)
index 1147b899f007d71eaebde3ff7d58d32ff27f935a..007c8e9b2b3974db3df79df602d1a6399015cf2c 100644 (file)
@@ -242,6 +242,13 @@ static ssize_t show_virtual(struct class_device *class_device, char *buf)
                        fb_info->var.yres_virtual);
 }
 
+static ssize_t show_stride(struct class_device *class_device, char *buf)
+{
+       struct fb_info *fb_info =
+               (struct fb_info *)class_get_devdata(class_device);
+       return snprintf(buf, PAGE_SIZE, "%d\n", fb_info->fix.line_length);
+}
+
 /* Format for cmap is "%02x%c%4x%4x%4x\n" */
 /* %02x entry %c transp %4x red %4x blue %4x green \n */
 /* 256 rows at 16 chars equals 4096, the normal page size */
@@ -432,6 +439,7 @@ static struct class_device_attribute class_device_attrs[] = {
        __ATTR(pan, S_IRUGO|S_IWUSR, show_pan, store_pan),
        __ATTR(virtual_size, S_IRUGO|S_IWUSR, show_virtual, store_virtual),
        __ATTR(name, S_IRUGO, show_name, NULL),
+       __ATTR(stride, S_IRUGO, show_stride, NULL),
 };
 
 int fb_init_class_device(struct fb_info *fb_info)
index 9fe7216457d883ad9264041d0c03572154f74ed6..edfca5b7553581c65cddc50ac14e18f84ec2826c 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1397,6 +1397,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb)
                if (unlikely(!access_ok(VERIFY_WRITE, kiocb->ki_buf,
                        kiocb->ki_left)))
                        break;
+               ret = security_file_permission(file, MAY_READ);
+               if (unlikely(ret))
+                       break;
                ret = -EINVAL;
                if (file->f_op->aio_read)
                        kiocb->ki_retry = aio_pread;
@@ -1409,6 +1412,9 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb)
                if (unlikely(!access_ok(VERIFY_READ, kiocb->ki_buf,
                        kiocb->ki_left)))
                        break;
+               ret = security_file_permission(file, MAY_WRITE);
+               if (unlikely(ret))
+                       break;
                ret = -EINVAL;
                if (file->f_op->aio_write)
                        kiocb->ki_retry = aio_pwrite;
index fd0f0f050e1d5f3643f7b6e7273af4d7ade0448e..452fc1fdbd32b9d3342c5e1c4f02e7b56664a718 100644 (file)
@@ -50,6 +50,7 @@ static void hfsplus_read_inode(struct inode *inode)
        init_MUTEX(&HFSPLUS_I(inode).extents_lock);
        HFSPLUS_I(inode).flags = 0;
        HFSPLUS_I(inode).rsrc_inode = NULL;
+       atomic_set(&HFSPLUS_I(inode).opencnt, 0);
 
        if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID) {
        read_inode:
index a37e9fb1da589fa1457929e2079e176220ad34c0..9fbaebfdf40bef99428d0feaa50d9b69cba234d0 100644 (file)
@@ -176,6 +176,7 @@ static inline void put_inotify_dev(struct inotify_device *dev)
        if (atomic_dec_and_test(&dev->count)) {
                atomic_dec(&dev->user->inotify_devs);
                free_uid(dev->user);
+               idr_destroy(&dev->idr);
                kfree(dev);
        }
 }
index 1b383e3cb68c942454d3e8d049e3266a772eea52..20ac3d95ecd9ae34ab3fcba2c58a5656c72be6d7 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _ALPHA_ATOMIC_H
 #define _ALPHA_ATOMIC_H
 
+#include <asm/barrier.h>
+
 /*
  * Atomic operations that C can't guarantee us.  Useful for
  * resource counting etc...
@@ -100,18 +102,19 @@ static __inline__ void atomic64_sub(long i, atomic64_t * v)
 static __inline__ long atomic_add_return(int i, atomic_t * v)
 {
        long temp, result;
+       smp_mb();
        __asm__ __volatile__(
        "1:     ldl_l %0,%1\n"
        "       addl %0,%3,%2\n"
        "       addl %0,%3,%0\n"
        "       stl_c %0,%1\n"
        "       beq %0,2f\n"
-       "       mb\n"
        ".subsection 2\n"
        "2:     br 1b\n"
        ".previous"
        :"=&r" (temp), "=m" (v->counter), "=&r" (result)
        :"Ir" (i), "m" (v->counter) : "memory");
+       smp_mb();
        return result;
 }
 
@@ -120,54 +123,57 @@ static __inline__ long atomic_add_return(int i, atomic_t * v)
 static __inline__ long atomic64_add_return(long i, atomic64_t * v)
 {
        long temp, result;
+       smp_mb();
        __asm__ __volatile__(
        "1:     ldq_l %0,%1\n"
        "       addq %0,%3,%2\n"
        "       addq %0,%3,%0\n"
        "       stq_c %0,%1\n"
        "       beq %0,2f\n"
-       "       mb\n"
        ".subsection 2\n"
        "2:     br 1b\n"
        ".previous"
        :"=&r" (temp), "=m" (v->counter), "=&r" (result)
        :"Ir" (i), "m" (v->counter) : "memory");
+       smp_mb();
        return result;
 }
 
 static __inline__ long atomic_sub_return(int i, atomic_t * v)
 {
        long temp, result;
+       smp_mb();
        __asm__ __volatile__(
        "1:     ldl_l %0,%1\n"
        "       subl %0,%3,%2\n"
        "       subl %0,%3,%0\n"
        "       stl_c %0,%1\n"
        "       beq %0,2f\n"
-       "       mb\n"
        ".subsection 2\n"
        "2:     br 1b\n"
        ".previous"
        :"=&r" (temp), "=m" (v->counter), "=&r" (result)
        :"Ir" (i), "m" (v->counter) : "memory");
+       smp_mb();
        return result;
 }
 
 static __inline__ long atomic64_sub_return(long i, atomic64_t * v)
 {
        long temp, result;
+       smp_mb();
        __asm__ __volatile__(
        "1:     ldq_l %0,%1\n"
        "       subq %0,%3,%2\n"
        "       subq %0,%3,%0\n"
        "       stq_c %0,%1\n"
        "       beq %0,2f\n"
-       "       mb\n"
        ".subsection 2\n"
        "2:     br 1b\n"
        ".previous"
        :"=&r" (temp), "=m" (v->counter), "=&r" (result)
        :"Ir" (i), "m" (v->counter) : "memory");
+       smp_mb();
        return result;
 }
 
diff --git a/include/asm-alpha/barrier.h b/include/asm-alpha/barrier.h
new file mode 100644 (file)
index 0000000..229c83f
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef __BARRIER_H
+#define __BARRIER_H
+
+#define mb() \
+__asm__ __volatile__("mb": : :"memory")
+
+#define rmb() \
+__asm__ __volatile__("mb": : :"memory")
+
+#define wmb() \
+__asm__ __volatile__("wmb": : :"memory")
+
+#define read_barrier_depends() \
+__asm__ __volatile__("mb": : :"memory")
+
+#ifdef CONFIG_SMP
+#define smp_mb()       mb()
+#define smp_rmb()      rmb()
+#define smp_wmb()      wmb()
+#define smp_read_barrier_depends()     read_barrier_depends()
+#else
+#define smp_mb()       barrier()
+#define smp_rmb()      barrier()
+#define smp_wmb()      barrier()
+#define smp_read_barrier_depends()     barrier()
+#endif
+
+#define set_mb(var, value) \
+do { var = value; mb(); } while (0)
+
+#define set_wmb(var, value) \
+do { var = value; wmb(); } while (0)
+
+#endif         /* __BARRIER_H */
index bdb4d66418f188767d89de67d1f4478ebbe41247..050e86d12891ef704762adba37cabe4a5cb19fe4 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/config.h>
 #include <asm/pal.h>
 #include <asm/page.h>
+#include <asm/barrier.h>
 
 /*
  * System defines.. Note that this is included both from .c and .S
@@ -139,36 +140,6 @@ extern void halt(void) __attribute__((noreturn));
 struct task_struct;
 extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*);
 
-#define mb() \
-__asm__ __volatile__("mb": : :"memory")
-
-#define rmb() \
-__asm__ __volatile__("mb": : :"memory")
-
-#define wmb() \
-__asm__ __volatile__("wmb": : :"memory")
-
-#define read_barrier_depends() \
-__asm__ __volatile__("mb": : :"memory")
-
-#ifdef CONFIG_SMP
-#define smp_mb()       mb()
-#define smp_rmb()      rmb()
-#define smp_wmb()      wmb()
-#define smp_read_barrier_depends()     read_barrier_depends()
-#else
-#define smp_mb()       barrier()
-#define smp_rmb()      barrier()
-#define smp_wmb()      barrier()
-#define smp_read_barrier_depends()     barrier()
-#endif
-
-#define set_mb(var, value) \
-do { var = value; mb(); } while (0)
-
-#define set_wmb(var, value) \
-do { var = value; wmb(); } while (0)
-
 #define imb() \
 __asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory")
 
index aad7aad026b319d7390ab3bf974f61d25c1ba5e6..e007dd990da568318a73765bd68767ad7f705b36 100644 (file)
@@ -347,7 +347,6 @@ static inline unsigned long __ffs(unsigned long word)
  * the clz instruction for much better code efficiency.
  */
 
-static __inline__ int generic_fls(int x);
 #define fls(x) \
        ( __builtin_constant_p(x) ? generic_fls(x) : \
          ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) )
index ca3b7e4625769d1333e9d882bab88ff404b96c5d..3d5de45f961b050d9780795c0bb07a34c866911c 100644 (file)
@@ -75,4 +75,5 @@ int idr_pre_get(struct idr *idp, unsigned gfp_mask);
 int idr_get_new(struct idr *idp, void *ptr, int *id);
 int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id);
 void idr_remove(struct idr *idp, int id);
+void idr_destroy(struct idr *idp);
 void idr_init(struct idr *idp);
index f74ed94624755003a3e628069fcb4364cf2780e2..71834f05504f3be6d6e0640cac78caf414d0a872 100644 (file)
 #define PCI_DEVICE_ID_HP_DIVA_EVEREST  0x1282
 #define PCI_DEVICE_ID_HP_DIVA_AUX      0x1290
 #define PCI_DEVICE_ID_HP_DIVA_RMP3     0x1301
+#define PCI_DEVICE_ID_HP_DIVA_HURRICANE        0x132a
 #define PCI_DEVICE_ID_HP_CISS          0x3210
 #define PCI_DEVICE_ID_HP_CISSA         0x3220
 #define PCI_DEVICE_ID_HP_CISSB         0x3222
 
 #define PCI_SUBVENDOR_ID_EXSYS         0xd84d
 #define PCI_SUBDEVICE_ID_EXSYS_4014    0x4014
+#define PCI_SUBDEVICE_ID_EXSYS_4055    0x4055
 
 #define PCI_VENDOR_ID_TIGERJET         0xe159
 #define PCI_DEVICE_ID_TIGERJET_300     0x0001
index 9dbcd9e51c00a33d1502824929468ce6a9e594c2..30bb4a893237ff8926a0c3f0cb79591ba96a072a 100644 (file)
@@ -171,7 +171,7 @@ typedef struct {
        ax25_address            calls[AX25_MAX_DIGIS];
        unsigned char           repeated[AX25_MAX_DIGIS];
        unsigned char           ndigi;
-       char                    lastrepeat;
+       signed char             lastrepeat;
 } ax25_digi;
 
 typedef struct ax25_route {
index f45c37d89cf70d6c82b0b13e6c175efd010743be..c7a959428b4ffa54f221b7d1f4473519631a6975 100644 (file)
@@ -254,8 +254,10 @@ static inline void llc_pdu_decode_sa(struct sk_buff *skb, u8 *sa)
 {
        if (skb->protocol == ntohs(ETH_P_802_2))
                memcpy(sa, eth_hdr(skb)->h_source, ETH_ALEN);
-       else if (skb->protocol == ntohs(ETH_P_TR_802_2))
+       else if (skb->protocol == ntohs(ETH_P_TR_802_2)) {
                memcpy(sa, tr_hdr(skb)->saddr, ETH_ALEN);
+               *sa &= 0x7F;
+       }
 }
 
 /**
index 3b25b182d2be35cfe8ddc69c53a908da96ce5aec..4897977a1f4b950b98672782826fa80df34ba15a 100644 (file)
@@ -825,14 +825,6 @@ fastcall NORET_TYPE void do_exit(long code)
 
        tsk->flags |= PF_EXITING;
 
-       /*
-        * Make sure we don't try to process any timer firings
-        * while we are already exiting.
-        */
-       tsk->it_virt_expires = cputime_zero;
-       tsk->it_prof_expires = cputime_zero;
-       tsk->it_sched_expires = 0;
-
        if (unlikely(in_atomic()))
                printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n",
                                current->comm, current->pid,
index 7a51a5597c33e04ad5f3f86d121779189ca326b3..383ba22f0b627613582807ff4051b7f35559dd10 100644 (file)
@@ -91,7 +91,7 @@ static inline union cpu_time_count cpu_time_sub(clockid_t which_clock,
  * Update expiry time from increment, and increase overrun count,
  * given the current clock sample.
  */
-static inline void bump_cpu_timer(struct k_itimer *timer,
+static void bump_cpu_timer(struct k_itimer *timer,
                                  union cpu_time_count now)
 {
        int i;
@@ -110,7 +110,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
                for (i = 0; incr < delta - incr; i++)
                        incr = incr << 1;
                for (; i >= 0; incr >>= 1, i--) {
-                       if (delta <= incr)
+                       if (delta < incr)
                                continue;
                        timer->it.cpu.expires.sched += incr;
                        timer->it_overrun += 1 << i;
@@ -128,7 +128,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
                for (i = 0; cputime_lt(incr, cputime_sub(delta, incr)); i++)
                             incr = cputime_add(incr, incr);
                for (; i >= 0; incr = cputime_halve(incr), i--) {
-                       if (cputime_le(delta, incr))
+                       if (cputime_lt(delta, incr))
                                continue;
                        timer->it.cpu.expires.cpu =
                                cputime_add(timer->it.cpu.expires.cpu, incr);
@@ -380,14 +380,9 @@ int posix_cpu_timer_create(struct k_itimer *new_timer)
 int posix_cpu_timer_del(struct k_itimer *timer)
 {
        struct task_struct *p = timer->it.cpu.task;
+       int ret = 0;
 
-       if (timer->it.cpu.firing)
-               return TIMER_RETRY;
-
-       if (unlikely(p == NULL))
-               return 0;
-
-       if (!list_empty(&timer->it.cpu.entry)) {
+       if (likely(p != NULL)) {
                read_lock(&tasklist_lock);
                if (unlikely(p->signal == NULL)) {
                        /*
@@ -396,18 +391,20 @@ int posix_cpu_timer_del(struct k_itimer *timer)
                         */
                        BUG_ON(!list_empty(&timer->it.cpu.entry));
                } else {
-                       /*
-                        * Take us off the task's timer list.
-                        */
                        spin_lock(&p->sighand->siglock);
-                       list_del(&timer->it.cpu.entry);
+                       if (timer->it.cpu.firing)
+                               ret = TIMER_RETRY;
+                       else
+                               list_del(&timer->it.cpu.entry);
                        spin_unlock(&p->sighand->siglock);
                }
                read_unlock(&tasklist_lock);
+
+               if (!ret)
+                       put_task_struct(p);
        }
-       put_task_struct(p);
 
-       return 0;
+       return ret;
 }
 
 /*
@@ -424,8 +421,6 @@ static void cleanup_timers(struct list_head *head,
        cputime_t ptime = cputime_add(utime, stime);
 
        list_for_each_entry_safe(timer, next, head, entry) {
-               put_task_struct(timer->task);
-               timer->task = NULL;
                list_del_init(&timer->entry);
                if (cputime_lt(timer->expires.cpu, ptime)) {
                        timer->expires.cpu = cputime_zero;
@@ -437,8 +432,6 @@ static void cleanup_timers(struct list_head *head,
 
        ++head;
        list_for_each_entry_safe(timer, next, head, entry) {
-               put_task_struct(timer->task);
-               timer->task = NULL;
                list_del_init(&timer->entry);
                if (cputime_lt(timer->expires.cpu, utime)) {
                        timer->expires.cpu = cputime_zero;
@@ -450,8 +443,6 @@ static void cleanup_timers(struct list_head *head,
 
        ++head;
        list_for_each_entry_safe(timer, next, head, entry) {
-               put_task_struct(timer->task);
-               timer->task = NULL;
                list_del_init(&timer->entry);
                if (timer->expires.sched < sched_time) {
                        timer->expires.sched = 0;
@@ -495,6 +486,9 @@ static void process_timer_rebalance(struct task_struct *p,
        struct task_struct *t = p;
        unsigned int nthreads = atomic_read(&p->signal->live);
 
+       if (!nthreads)
+               return;
+
        switch (clock_idx) {
        default:
                BUG();
@@ -582,17 +576,15 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
        listpos = head;
        if (CPUCLOCK_WHICH(timer->it_clock) == CPUCLOCK_SCHED) {
                list_for_each_entry(next, head, entry) {
-                       if (next->expires.sched > nt->expires.sched) {
-                               listpos = &next->entry;
+                       if (next->expires.sched > nt->expires.sched)
                                break;
-                       }
+                       listpos = &next->entry;
                }
        } else {
                list_for_each_entry(next, head, entry) {
-                       if (cputime_gt(next->expires.cpu, nt->expires.cpu)) {
-                               listpos = &next->entry;
+                       if (cputime_gt(next->expires.cpu, nt->expires.cpu))
                                break;
-                       }
+                       listpos = &next->entry;
                }
        }
        list_add(&nt->entry, listpos);
@@ -736,9 +728,15 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
         * Disarm any old timer after extracting its expiry time.
         */
        BUG_ON(!irqs_disabled());
+
+       ret = 0;
        spin_lock(&p->sighand->siglock);
        old_expires = timer->it.cpu.expires;
-       list_del_init(&timer->it.cpu.entry);
+       if (unlikely(timer->it.cpu.firing)) {
+               timer->it.cpu.firing = -1;
+               ret = TIMER_RETRY;
+       } else
+               list_del_init(&timer->it.cpu.entry);
        spin_unlock(&p->sighand->siglock);
 
        /*
@@ -786,7 +784,7 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
                }
        }
 
-       if (unlikely(timer->it.cpu.firing)) {
+       if (unlikely(ret)) {
                /*
                 * We are colliding with the timer actually firing.
                 * Punt after filling in the timer's old value, and
@@ -794,8 +792,6 @@ int posix_cpu_timer_set(struct k_itimer *timer, int flags,
                 * it as an overrun (thanks to bump_cpu_timer above).
                 */
                read_unlock(&tasklist_lock);
-               timer->it.cpu.firing = -1;
-               ret = TIMER_RETRY;
                goto out;
        }
 
@@ -961,14 +957,16 @@ void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp)
 static void check_thread_timers(struct task_struct *tsk,
                                struct list_head *firing)
 {
+       int maxfire;
        struct list_head *timers = tsk->cpu_timers;
 
+       maxfire = 20;
        tsk->it_prof_expires = cputime_zero;
        while (!list_empty(timers)) {
                struct cpu_timer_list *t = list_entry(timers->next,
                                                      struct cpu_timer_list,
                                                      entry);
-               if (cputime_lt(prof_ticks(tsk), t->expires.cpu)) {
+               if (!--maxfire || cputime_lt(prof_ticks(tsk), t->expires.cpu)) {
                        tsk->it_prof_expires = t->expires.cpu;
                        break;
                }
@@ -977,12 +975,13 @@ static void check_thread_timers(struct task_struct *tsk,
        }
 
        ++timers;
+       maxfire = 20;
        tsk->it_virt_expires = cputime_zero;
        while (!list_empty(timers)) {
                struct cpu_timer_list *t = list_entry(timers->next,
                                                      struct cpu_timer_list,
                                                      entry);
-               if (cputime_lt(virt_ticks(tsk), t->expires.cpu)) {
+               if (!--maxfire || cputime_lt(virt_ticks(tsk), t->expires.cpu)) {
                        tsk->it_virt_expires = t->expires.cpu;
                        break;
                }
@@ -991,12 +990,13 @@ static void check_thread_timers(struct task_struct *tsk,
        }
 
        ++timers;
+       maxfire = 20;
        tsk->it_sched_expires = 0;
        while (!list_empty(timers)) {
                struct cpu_timer_list *t = list_entry(timers->next,
                                                      struct cpu_timer_list,
                                                      entry);
-               if (tsk->sched_time < t->expires.sched) {
+               if (!--maxfire || tsk->sched_time < t->expires.sched) {
                        tsk->it_sched_expires = t->expires.sched;
                        break;
                }
@@ -1013,6 +1013,7 @@ static void check_thread_timers(struct task_struct *tsk,
 static void check_process_timers(struct task_struct *tsk,
                                 struct list_head *firing)
 {
+       int maxfire;
        struct signal_struct *const sig = tsk->signal;
        cputime_t utime, stime, ptime, virt_expires, prof_expires;
        unsigned long long sched_time, sched_expires;
@@ -1045,12 +1046,13 @@ static void check_process_timers(struct task_struct *tsk,
        } while (t != tsk);
        ptime = cputime_add(utime, stime);
 
+       maxfire = 20;
        prof_expires = cputime_zero;
        while (!list_empty(timers)) {
                struct cpu_timer_list *t = list_entry(timers->next,
                                                      struct cpu_timer_list,
                                                      entry);
-               if (cputime_lt(ptime, t->expires.cpu)) {
+               if (!--maxfire || cputime_lt(ptime, t->expires.cpu)) {
                        prof_expires = t->expires.cpu;
                        break;
                }
@@ -1059,12 +1061,13 @@ static void check_process_timers(struct task_struct *tsk,
        }
 
        ++timers;
+       maxfire = 20;
        virt_expires = cputime_zero;
        while (!list_empty(timers)) {
                struct cpu_timer_list *t = list_entry(timers->next,
                                                      struct cpu_timer_list,
                                                      entry);
-               if (cputime_lt(utime, t->expires.cpu)) {
+               if (!--maxfire || cputime_lt(utime, t->expires.cpu)) {
                        virt_expires = t->expires.cpu;
                        break;
                }
@@ -1073,12 +1076,13 @@ static void check_process_timers(struct task_struct *tsk,
        }
 
        ++timers;
+       maxfire = 20;
        sched_expires = 0;
        while (!list_empty(timers)) {
                struct cpu_timer_list *t = list_entry(timers->next,
                                                      struct cpu_timer_list,
                                                      entry);
-               if (sched_time < t->expires.sched) {
+               if (!--maxfire || sched_time < t->expires.sched) {
                        sched_expires = t->expires.sched;
                        break;
                }
@@ -1161,6 +1165,9 @@ static void check_process_timers(struct task_struct *tsk,
                unsigned long long sched_left, sched;
                const unsigned int nthreads = atomic_read(&sig->live);
 
+               if (!nthreads)
+                       return;
+
                prof_left = cputime_sub(prof_expires, utime);
                prof_left = cputime_sub(prof_left, stime);
                prof_left = cputime_div(prof_left, nthreads);
@@ -1286,30 +1293,30 @@ void run_posix_cpu_timers(struct task_struct *tsk)
 
 #undef UNEXPIRED
 
-       BUG_ON(tsk->exit_state);
-
        /*
         * Double-check with locks held.
         */
        read_lock(&tasklist_lock);
-       spin_lock(&tsk->sighand->siglock);
+       if (likely(tsk->signal != NULL)) {
+               spin_lock(&tsk->sighand->siglock);
 
-       /*
-        * Here we take off tsk->cpu_timers[N] and tsk->signal->cpu_timers[N]
-        * all the timers that are firing, and put them on the firing list.
-        */
-       check_thread_timers(tsk, &firing);
-       check_process_timers(tsk, &firing);
+               /*
+                * Here we take off tsk->cpu_timers[N] and tsk->signal->cpu_timers[N]
+                * all the timers that are firing, and put them on the firing list.
+                */
+               check_thread_timers(tsk, &firing);
+               check_process_timers(tsk, &firing);
 
-       /*
-        * We must release these locks before taking any timer's lock.
-        * There is a potential race with timer deletion here, as the
-        * siglock now protects our private firing list.  We have set
-        * the firing flag in each timer, so that a deletion attempt
-        * that gets the timer lock before we do will give it up and
-        * spin until we've taken care of that timer below.
-        */
-       spin_unlock(&tsk->sighand->siglock);
+               /*
+                * We must release these locks before taking any timer's lock.
+                * There is a potential race with timer deletion here, as the
+                * siglock now protects our private firing list.  We have set
+                * the firing flag in each timer, so that a deletion attempt
+                * that gets the timer lock before we do will give it up and
+                * spin until we've taken care of that timer below.
+                */
+               spin_unlock(&tsk->sighand->siglock);
+       }
        read_unlock(&tasklist_lock);
 
        /*
index 1f31a528fdba8ef941f5a75acb65c3ac6a4bf815..1e5cafdf4e27619d0320f03dd51b324850b7b077 100644 (file)
@@ -3879,6 +3879,7 @@ EXPORT_SYMBOL(cpu_present_map);
 
 #ifndef CONFIG_SMP
 cpumask_t cpu_online_map = CPU_MASK_ALL;
+EXPORT_SYMBOL_GPL(cpu_online_map);
 cpumask_t cpu_possible_map = CPU_MASK_ALL;
 #endif
 
index 6415d053e2bfa838e3a95313137d07a944261fd8..d4df21debc4ddb77948206f6091fb27c569e9909 100644 (file)
--- a/lib/idr.c
+++ b/lib/idr.c
@@ -345,6 +345,19 @@ void idr_remove(struct idr *idp, int id)
 }
 EXPORT_SYMBOL(idr_remove);
 
+/**
+ * idr_destroy - release all cached layers within an idr tree
+ * idp: idr handle
+ */
+void idr_destroy(struct idr *idp)
+{
+       while (idp->id_free_cnt) {
+               struct idr_layer *p = alloc_layer(idp);
+               kmem_cache_free(idr_layer_cache, p);
+       }
+}
+EXPORT_SYMBOL(idr_destroy);
+
 /**
  * idr_find - return pointer for given id
  * @idp: idr handle
index cc1fe2672a31b5d17f290fc0e196cc327363f9b3..e1d3d77f4aeef89259d9e3b09e500042a42d7a87 100644 (file)
@@ -1750,6 +1750,8 @@ inline void setup_pageset(struct per_cpu_pageset *p, unsigned long batch)
 {
        struct per_cpu_pages *pcp;
 
+       memset(p, 0, sizeof(*p));
+
        pcp = &p->pcp[0];               /* hot */
        pcp->count = 0;
        pcp->low = 2 * batch;
index 1eaa3d19d8bf760b19b57d2a6b5556de677dd0cb..afd8385c0c9c319bff792f714cc3326881db95d9 100644 (file)
@@ -340,9 +340,10 @@ static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev)
        unsigned int hash, rii_p = 0;
        unsigned long flags;
        struct rif_cache *entry;
-
+       unsigned char saddr0;
 
        spin_lock_irqsave(&rif_lock, flags);
+       saddr0 = trh->saddr[0];
        
        /*
         *      Firstly see if the entry exists
@@ -395,7 +396,6 @@ printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
                        entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK);
                        memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short));
                        entry->local_ring = 0;
-                       trh->saddr[0]|=TR_RII; /* put the routing indicator back for tcpdump */
                }
                else
                {
@@ -422,6 +422,7 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
                    }                                         
                entry->last_used=jiffies;               
        }
+       trh->saddr[0]=saddr0; /* put the routing indicator back for tcpdump */
        spin_unlock_irqrestore(&rif_lock, flags);
 }
 
index 4128fc76ac3a2906bc586c1f5b05ae670cdca686..1dcf7fa1f0fead6dc2469d0a478025284921e804 100644 (file)
@@ -175,39 +175,10 @@ static void pneigh_queue_purge(struct sk_buff_head *list)
        }
 }
 
-void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev)
+static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev)
 {
        int i;
 
-       write_lock_bh(&tbl->lock);
-
-       for (i=0; i <= tbl->hash_mask; i++) {
-               struct neighbour *n, **np;
-
-               np = &tbl->hash_buckets[i];
-               while ((n = *np) != NULL) {
-                       if (dev && n->dev != dev) {
-                               np = &n->next;
-                               continue;
-                       }
-                       *np = n->next;
-                       write_lock_bh(&n->lock);
-                       n->dead = 1;
-                       neigh_del_timer(n);
-                       write_unlock_bh(&n->lock);
-                       neigh_release(n);
-               }
-       }
-
-        write_unlock_bh(&tbl->lock);
-}
-
-int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
-{
-       int i;
-
-       write_lock_bh(&tbl->lock);
-
        for (i = 0; i <= tbl->hash_mask; i++) {
                struct neighbour *n, **np = &tbl->hash_buckets[i];
 
@@ -243,7 +214,19 @@ int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
                        neigh_release(n);
                }
        }
+}
 
+void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev)
+{
+       write_lock_bh(&tbl->lock);
+       neigh_flush_dev(tbl, dev);
+       write_unlock_bh(&tbl->lock);
+}
+
+int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
+{
+       write_lock_bh(&tbl->lock);
+       neigh_flush_dev(tbl, dev);
        pneigh_ifdown(tbl, dev);
        write_unlock_bh(&tbl->lock);
 
@@ -732,6 +715,7 @@ static inline void neigh_add_timer(struct neighbour *n, unsigned long when)
        if (unlikely(mod_timer(&n->timer, when))) {
                printk("NEIGH: BUG, double timer add, state is %x\n",
                       n->nud_state);
+               dump_stack();
        }
 }
 
@@ -815,10 +799,10 @@ static void neigh_timer_handler(unsigned long arg)
        }
 
        if (neigh->nud_state & NUD_IN_TIMER) {
-               neigh_hold(neigh);
                if (time_before(next, jiffies + HZ/2))
                        next = jiffies + HZ/2;
-               neigh_add_timer(neigh, next);
+               if (!mod_timer(&neigh->timer, next))
+                       neigh_hold(neigh);
        }
        if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) {
                struct sk_buff *skb = skb_peek(&neigh->arp_queue);
index af9b1516e21fbe7bcfd23cef764a419ef02ba5c0..02cd4cde2112a6456e1da188873b708af9bc1338 100644 (file)
@@ -410,6 +410,9 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
        C(nfct);
        nf_conntrack_get(skb->nfct);
        C(nfctinfo);
+#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
+       C(ipvs_property);
+#endif
 #ifdef CONFIG_BRIDGE_NETFILTER
        C(nf_bridge);
        nf_bridge_get(skb->nf_bridge);
@@ -467,6 +470,9 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
        new->nfct       = old->nfct;
        nf_conntrack_get(old->nfct);
        new->nfctinfo   = old->nfctinfo;
+#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
+       new->ipvs_property = old->ipvs_property;
+#endif
 #ifdef CONFIG_BRIDGE_NETFILTER
        new->nf_bridge  = old->nf_bridge;
        nf_bridge_get(old->nf_bridge);
index d17f1583ea3e00150424839b4254b709cf48ac8f..271ddb35b0b273a005f5315968c1059006252f6b 100644 (file)
@@ -455,10 +455,15 @@ static inline struct iw_statistics *get_wireless_stats(struct net_device *dev)
 
        /* Old location, field to be removed in next WE */
        if(dev->get_wireless_stats) {
-               printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n",
-                      dev->name);
+               static int printed_message;
+
+               if (!printed_message++)
+                       printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n",
+                               dev->name);
+
                return dev->get_wireless_stats(dev);
        }
+
        /* Not found */
        return (struct iw_statistics *) NULL;
 }
index 3f1a263e1249ebbaef7e3fb719252bb90d19ee6a..1ad5202e556b5d1862f5c0b1c9895c45e81e4c04 100644 (file)
@@ -391,6 +391,9 @@ static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from)
        to->nfct = from->nfct;
        nf_conntrack_get(to->nfct);
        to->nfctinfo = from->nfctinfo;
+#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
+       to->ipvs_property = from->ipvs_property;
+#endif
 #ifdef CONFIG_BRIDGE_NETFILTER
        nf_bridge_put(to->nf_bridge);
        to->nf_bridge = from->nf_bridge;
index f841bde30c18493a94fd5d522b84724a8eb82a4a..bbbe80cdaf72a75a463aff9551e60b31e2f69061 100644 (file)
@@ -483,7 +483,7 @@ int ipv6_flowlabel_opt(struct sock *sk, char __user *optval, int optlen)
                                                goto done;
                                        }
                                        fl1 = sfl->fl;
-                                       atomic_inc(&fl->users);
+                                       atomic_inc(&fl1->users);
                                        break;
                                }
                        }
index 30ec3efc48a654fe16e7f7f096b42e4e44727b72..691dea4a58e757ed60e7ff739b0acac3b6bb79e7 100644 (file)
@@ -587,7 +587,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
                struct timeval tv;
 
                tv.tv_sec = xtime.tv_sec;
-               tv.tv_usec = xtime.tv_nsec * 1000;
+               tv.tv_usec = xtime.tv_nsec / NSEC_PER_USEC;
                skb_set_timestamp(skb, &tv);
                /* Don't enable netstamp, sunrpc doesn't 
                   need that much accuracy */
index 8eb140dd2e4b3bda4906f717491bb740b4450e50..a45cc971e73588bdc0c2e5a74774736c854f713d 100644 (file)
@@ -879,7 +879,7 @@ static ssize_t sel_commit_bools_write(struct file *filep,
        if (sscanf(page, "%d", &new_value) != 1)
                goto out;
 
-       if (new_value) {
+       if (new_value && bool_pending_values) {
                security_set_bools(bool_num, bool_pending_values);
        }
 
@@ -952,6 +952,7 @@ static int sel_make_bools(void)
 
        /* remove any existing files */
        kfree(bool_pending_values);
+       bool_pending_values = NULL;
 
        sel_remove_bools(dir);
 
@@ -1002,6 +1003,7 @@ out:
        }
        return ret;
 err:
+       kfree(values);
        d_genocide(dir);
        ret = -ENOMEM;
        goto out;
index 0a758323a9cf61b10678d7308a87fc05316129cf..8e6262d12aa9bfaa97d3641946d6ae32fa132e54 100644 (file)
@@ -650,8 +650,10 @@ void policydb_destroy(struct policydb *p)
        }
        if (lrt) kfree(lrt);
 
-       for (i = 0; i < p->p_types.nprim; i++)
-               ebitmap_destroy(&p->type_attr_map[i]);
+       if (p->type_attr_map) {
+               for (i = 0; i < p->p_types.nprim; i++)
+                       ebitmap_destroy(&p->type_attr_map[i]);
+       }
        kfree(p->type_attr_map);
 
        return;
index a5702014a704e0ffcbf153156532fd69a151601b..c72a79115cca2e64ecc36fc9de1fae40bc24f2f3 100644 (file)
@@ -828,7 +828,8 @@ static int snd_generic_suspend(struct device *dev, pm_message_t state, u32 level
        card = get_snd_generic_card(dev);
        if (card->power_state == SNDRV_CTL_POWER_D3hot)
                return 0;
-       card->pm_suspend(card, PMSG_SUSPEND);
+       if (card->pm_suspend)
+               card->pm_suspend(card, PMSG_SUSPEND);
        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
        return 0;
 }
@@ -843,7 +844,8 @@ static int snd_generic_resume(struct device *dev, u32 level)
        card = get_snd_generic_card(dev);
        if (card->power_state == SNDRV_CTL_POWER_D0)
                return 0;
-       card->pm_resume(card);
+       if (card->pm_suspend)
+               card->pm_resume(card);
        snd_power_change_state(card, SNDRV_CTL_POWER_D0);
        return 0;
 }