]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 24 Oct 2010 20:41:39 +0000 (13:41 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 24 Oct 2010 20:41:39 +0000 (13:41 -0700)
* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (39 commits)
  Update broken web addresses in arch directory.
  Update broken web addresses in the kernel.
  Revert "drivers/usb: Remove unnecessary return's from void functions" for musb gadget
  Revert "Fix typo: configuation => configuration" partially
  ida: document IDA_BITMAP_LONGS calculation
  ext2: fix a typo on comment in ext2/inode.c
  drivers/scsi: Remove unnecessary casts of private_data
  drivers/s390: Remove unnecessary casts of private_data
  net/sunrpc/rpc_pipe.c: Remove unnecessary casts of private_data
  drivers/infiniband: Remove unnecessary casts of private_data
  drivers/gpu/drm: Remove unnecessary casts of private_data
  kernel/pm_qos_params.c: Remove unnecessary casts of private_data
  fs/ecryptfs: Remove unnecessary casts of private_data
  fs/seq_file.c: Remove unnecessary casts of private_data
  arm: uengine.c: remove C99 comments
  arm: scoop.c: remove C99 comments
  Fix typo configue => configure in comments
  Fix typo: configuation => configuration
  Fix typo interrest[ing|ed] => interest[ing|ed]
  Fix various typos of valid in comments
  ...

Fix up trivial conflicts in:
drivers/char/ipmi/ipmi_si_intf.c
drivers/usb/gadget/rndis.c
net/irda/irnet/irnet_ppp.c

101 files changed:
1  2 
Documentation/kernel-parameters.txt
MAINTAINERS
arch/arm/Kconfig
arch/arm/mach-at91/Kconfig
arch/arm/mach-omap2/hsmmc.h
arch/arm/mach-s3c2440/mach-at2440evb.c
arch/avr32/Kconfig
arch/blackfin/mach-bf527/boards/ezkit.c
arch/blackfin/mach-bf537/boards/stamp.c
arch/m68k/mac/macboing.c
arch/mips/Kconfig
arch/mips/sibyte/common/sb_tbprof.c
arch/x86/kernel/apm_32.c
arch/x86/kernel/microcode_core.c
block/blk-core.c
drivers/ata/pata_bf54x.c
drivers/base/core.c
drivers/char/agp/Kconfig
drivers/char/apm-emulation.c
drivers/char/ipmi/ipmi_si_intf.c
drivers/char/pcmcia/cm4000_cs.c
drivers/char/stallion.c
drivers/edac/edac_device_sysfs.c
drivers/firmware/Kconfig
drivers/gpu/drm/drm_modes.c
drivers/gpu/drm/radeon/radeon_cs.c
drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
drivers/hwmon/f75375s.c
drivers/ide/ide-disk.c
drivers/infiniband/hw/qib/qib_file_ops.c
drivers/macintosh/therm_adt746x.c
drivers/media/dvb/ttpci/av7110.c
drivers/media/dvb/ttpci/av7110_av.c
drivers/media/dvb/ttpci/av7110_ca.c
drivers/misc/Kconfig
drivers/net/Kconfig
drivers/net/appletalk/Kconfig
drivers/net/atp.c
drivers/net/epic100.c
drivers/net/ibmlana.c
drivers/net/igb/igb_main.c
drivers/net/pci-skeleton.c
drivers/net/pcmcia/3c574_cs.c
drivers/net/ps3_gelic_net.c
drivers/net/sb1250-mac.c
drivers/net/sc92031.c
drivers/net/skfp/hwt.c
drivers/net/skfp/skfddi.c
drivers/net/tlan.c
drivers/net/tokenring/tms380tr.c
drivers/net/tulip/Kconfig
drivers/net/wireless/ath/ath5k/ath5k.h
drivers/net/wireless/ath/ath5k/reg.h
drivers/net/wireless/p54/Kconfig
drivers/pci/quirks.c
drivers/pcmcia/yenta_socket.c
drivers/rtc/rtc-nuc900.c
drivers/s390/char/vmcp.c
drivers/scsi/Kconfig
drivers/scsi/aacraid/linit.c
drivers/scsi/lpfc/lpfc_hbadisc.c
drivers/scsi/sg.c
drivers/serial/8250.c
drivers/serial/bfin_sport_uart.c
drivers/serial/uartlite.c
drivers/usb/gadget/at91_udc.c
drivers/usb/gadget/f_hid.c
drivers/usb/gadget/fsl_udc_core.c
drivers/usb/gadget/pxa27x_udc.c
drivers/usb/gadget/rndis.c
drivers/usb/host/ehci-hcd.c
drivers/usb/host/imx21-hcd.c
drivers/usb/host/ohci-hcd.c
drivers/usb/host/oxu210hp-hcd.c
drivers/usb/host/pci-quirks.c
drivers/usb/misc/ftdi-elan.c
drivers/usb/serial/Kconfig
drivers/usb/serial/ftdi_sio.c
drivers/usb/serial/ftdi_sio_ids.h
drivers/usb/serial/io_edgeport.c
drivers/usb/serial/io_ti.c
drivers/usb/serial/mos7720.c
drivers/usb/serial/mos7840.c
drivers/usb/storage/Kconfig
drivers/video/Kconfig
fs/exofs/inode.c
fs/exofs/ios.c
fs/partitions/ldm.c
include/linux/idr.h
init/Kconfig
kernel/pm_qos_params.c
kernel/trace/trace_kprobe.c
mm/percpu.c
mm/vmscan.c
net/ipv4/Kconfig
net/ipv4/fib_trie.c
net/ipv4/netfilter/Kconfig
net/ipv4/tcp_input.c
net/irda/irnet/irnet_ppp.c
net/sunrpc/rpc_pipe.c
sound/pci/intel8x0.c

index 9533af74a12799312b721084945413cf651b072c,8ed3a7772da131cc115f3df470455e7bcb65ae1e..0b6815504e6de780f84b8aef3daa0acec47957ac
@@@ -43,11 -43,10 +43,11 @@@ parameter is applicable
        AVR32   AVR32 architecture is enabled.
        AX25    Appropriate AX.25 support is enabled.
        BLACKFIN Blackfin architecture 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.
 +      DRM     Direct Rendering Management support is enabled.
 +      DYNAMIC_DEBUG Build in debug messages and enable them at runtime
        FB      The frame buffer device is enabled.
        GCOV    GCOV profiling is enabled.
        HW      Appropriate hardware is enabled.
@@@ -89,8 -88,8 +89,8 @@@
        RAM     RAM disk support is enabled.
        S390    S390 architecture is enabled.
        SCSI    Appropriate SCSI support is enabled.
 -                      A lot of drivers has their options described inside of
 -                      Documentation/scsi/.
 +                      A lot of drivers have their options described inside
 +                      the Documentation/scsi/ sub-directory.
        SECURITY Different security models are enabled.
        SELINUX SELinux support is enabled.
        APPARMOR AppArmor support is enabled.
@@@ -285,12 -284,27 +285,12 @@@ and is between 256 and 4096 characters
        add_efi_memmap  [EFI; X86] Include EFI memory map in
                        kernel's map of available physical RAM.
  
 -      advansys=       [HW,SCSI]
 -                      See header of drivers/scsi/advansys.c.
 -
        agp=            [AGP]
                        { off | try_unsupported }
                        off: disable AGP support
                        try_unsupported: try to drive unsupported chipsets
                                (may crash computer or cause data corruption)
  
 -      aha152x=        [HW,SCSI]
 -                      See Documentation/scsi/aha152x.txt.
 -
 -      aha1542=        [HW,SCSI]
 -                      Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]]
 -
 -      aic7xxx=        [HW,SCSI]
 -                      See Documentation/scsi/aic7xxx.txt.
 -
 -      aic79xx=        [HW,SCSI]
 -                      See Documentation/scsi/aic79xx.txt.
 -
        ALSA            [HW,ALSA]
                        See Documentation/sound/alsa/alsa-parameters.txt
  
  
        atarimouse=     [HW,MOUSE] Atari Mouse
  
 -      atascsi=        [HW,SCSI] Atari SCSI
 -
        atkbd.extra=    [HW] Enable extra LEDs and keys on IBM RapidAccess,
                        EzKey and similar keyboards
  
        bttv.pll=       See Documentation/video4linux/bttv/Insmod-options
        bttv.tuner=     and Documentation/video4linux/bttv/CARDLIST
  
 -      BusLogic=       [HW,SCSI]
 -                      See drivers/scsi/BusLogic.c, comment before function
 -                      BusLogic_ParseDriverOptions().
 -
        c101=           [NET] Moxa C101 synchronous serial card
  
        cachesize=      [BUGS=X86-32] Override level 2 CPU cache size detection.
                        [ARM] imx_timer1,OSTS,netx_timer,mpu_timer2,
                                pxa_timer,timer3,32k_counter,timer0_1
                        [AVR32] avr32
 -                      [X86-32] pit,hpet,tsc,vmi-timer;
 +                      [X86-32] pit,hpet,tsc;
                                scx200_hrt on Geode; cyclone on IBM x440
                        [MIPS] MIPS
                        [PARISC] cr16
                        Format: <port#>,<type>
                        See also Documentation/input/joystick-parport.txt
  
 +      ddebug_query=   [KNL,DYNAMIC_DEBUG] Enable debug messages at early boot
 +                      time. See Documentation/dynamic-debug-howto.txt for
 +                      details.
 +
        debug           [KNL] Enable kernel debugging (events log level).
  
        debug_locks_verbose=
  
        dscc4.setup=    [NET]
  
 -      dtc3181e=       [HW,SCSI]
 -
        dynamic_printk  Enables pr_debug()/dev_dbg() calls if
                        CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled.
                        These can also be switched on/off via
                        This is desgined to be used in conjunction with
                        the boot argument: earlyprintk=vga
  
 -      eata=           [HW,SCSI]
 -
        edd=            [EDD]
                        Format: {"off" | "on" | "skip[mbr]"}
  
                        Format: <interval>,<probability>,<space>,<times>
                        See also /Documentation/fault-injection/.
  
 -      fd_mcs=         [HW,SCSI]
 -                      See header of drivers/scsi/fd_mcs.c.
 -
 -      fdomain=        [HW,SCSI]
 -                      See header of drivers/scsi/fdomain.c.
 -
        floppy=         [HW]
                        See Documentation/blockdev/floppy.txt.
  
                        When zero, profiling data is discarded and associated
                        debugfs files are removed at module unload time.
  
 -      gdth=           [HW,SCSI]
 -                      See header of drivers/scsi/gdth.c.
 -
        gpt             [EFI] Forces disk with valid GPT signature but
                        invalid Protective MBR to be treated as GPT.
  
 -      gvp11=          [HW,SCSI]
 -
        hashdist=       [KNL,NUMA] Large hashes allocated during boot
                        are distributed across NUMA nodes.  Defaults on
                        for 64bit NUMA, off otherwise.
                             controller
        i8042.nopnp     [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
                             controllers
 -      i8042.panicblink=
 -                      [HW] Frequency with which keyboard LEDs should blink
 -                           when kernel panics (default is 0.5 sec)
        i8042.reset     [HW] Reset the controller during init and cleanup
        i8042.unlock    [HW] Unlock (ignore) the keylock
  
        i8k.restricted  [HW] Allow controlling fans only if SYS_ADMIN
                        capability is set.
  
 -      ibmmcascsi=     [HW,MCA,SCSI] IBM MicroChannel SCSI adapter
 -                      See Documentation/mca.txt.
 -
        icn=            [HW,ISDN]
                        Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]]
  
                        programs exec'd, files mmap'd for exec, and all files
                        opened for read by uid=0.
  
 -      in2000=         [HW,SCSI]
 -                      See header of drivers/scsi/in2000.c.
 -
        init=           [KNL]
                        Format: <full_path>
                        Run specified binary instead of /sbin/init as init
                        result in a hardware IOTLB flush operation as opposed
                        to batching them for performance.
  
 +      intremap=       [X86-64, Intel-IOMMU]
 +                      Format: { on (default) | off | nosid }
 +                      on      enable Interrupt Remapping (default)
 +                      off     disable Interrupt Remapping
 +                      nosid   disable Source ID checking
 +
        inttest=        [IA64]
  
        iomem=          Disable strict checking of access to MMIO memory
                        See comment before ip2_setup() in
                        drivers/char/ip2/ip2base.c.
  
 -      ips=            [HW,SCSI] Adaptec / IBM ServeRAID controller
 -                      See header of drivers/scsi/ips.c.
 -
        irqfixup        [HW]
                        When an interrupt is not handled search all handlers
                        for it. Intended to get systems with badly broken
        kvm.oos_shadow= [KVM] Disable out-of-sync shadow paging.
                        Default is 1 (enabled)
  
 -      kvm-amd.nested= [KVM,AMD] Allow nested virtualization in KVM/SVM.
 +      kvm.mmu_audit=  [KVM] This is a R/W parameter which allows audit
 +                      KVM MMU at runtime.
                        Default is 0 (off)
  
 +      kvm-amd.nested= [KVM,AMD] Allow nested virtualization in KVM/SVM.
 +                      Default is 1 (enabled)
 +
        kvm-amd.npt=    [KVM,AMD] Disable nested paging (virtualized MMU)
                        for all guests.
                        Default is 1 (enabled) if in 64bit or 32bit-PAE mode
        ltpc=           [NET]
                        Format: <io>,<irq>,<dma>
  
 -      mac5380=        [HW,SCSI] Format:
 -                      <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
                        be mounted
                        Format: <1-256>
  
 -      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.
 -                      Should be between 1 and 16384.
 -
        mcatest=        [IA-64]
  
        mce             [X86-32] Machine Check Exception
  
        n2=             [NET] SDL Inc. RISCom/N2 synchronous serial card
  
 -      NCR_D700=       [HW,SCSI]
 -                      See header of drivers/scsi/NCR_D700.c.
 -
 -      ncr5380=        [HW,SCSI]
 -
 -      ncr53c400=      [HW,SCSI]
 -
 -      ncr53c400a=     [HW,SCSI]
 -
 -      ncr53c406a=     [HW,SCSI]
 -
 -      ncr53c8xx=      [HW,SCSI]
 -
        netdev=         [NET] Network devices parameters
                        Format: <irq>,<io>,<mem_start>,<mem_end>,<name>
                        Note that mem_start is often overloaded to mean
  
        nointremap      [X86-64, Intel-IOMMU] Do not enable interrupt
                        remapping.
 +                      [Deprecated - use intremap=off]
  
        nointroute      [IA-64]
  
        nojitter        [IA64] Disables jitter checking for ITC timers.
  
 +      no-kvmclock     [X86,KVM] Disable paravirtualized KVM clock driver
 +
        nolapic         [X86-32,APIC] Do not enable or use the local APIC.
  
        nolapic_timer   [X86-32,APIC] Do not use the local APIC timer.
        norandmaps      Don't use address space randomization.  Equivalent to
                        echo 0 > /proc/sys/kernel/randomize_va_space
  
-       noreplace-paravirt      [X86-32,PV_OPS] Don't patch paravirt_ops
+       noreplace-paravirt      [X86,IA-64,PV_OPS] Don't patch paravirt_ops
  
        noreplace-smp   [X86-32,SMP] Don't replace SMP instructions
                        with UP alternatives
        OSS             [HW,OSS]
                        See Documentation/sound/oss/oss-parameters.txt
  
 -      osst=           [HW,SCSI] SCSI Tape Driver
 -                      Format: <buffer_size>,<write_threshold>
 -                      See also Documentation/scsi/st.txt.
 -
        panic=          [KNL] Kernel behaviour on panic
                        Format: <timeout>
  
                        Currently this function knows 686a and 8231 chips.
                        Format: [spp|ps2|epp|ecp|ecpepp]
  
 -      pas16=          [HW,SCSI]
 -                      See header of drivers/scsi/pas16.c.
 -
        pause_on_oops=
                        Halt all CPUs after the first oops has been printed for
                        the specified number of seconds.  This is to be used if
                force   Enable ASPM even on devices that claim not to support it.
                        WARNING: Forcing ASPM on may cause system lockups.
  
 +      pcie_ports=     [PCIE] PCIe ports handling:
 +              auto    Ask the BIOS whether or not to use native PCIe services
 +                      associated with PCIe ports (PME, hot-plug, AER).  Use
 +                      them only if that is allowed by the BIOS.
 +              native  Use native PCIe services associated with PCIe ports
 +                      unconditionally.
 +              compat  Treat PCIe ports as PCI-to-PCI bridges, disable the PCIe
 +                      ports driver.
 +
        pcie_pme=       [PCIE,PM] Native PCIe PME signaling options:
 -                      Format: {auto|force}[,nomsi]
 -              auto    Use native PCIe PME signaling if the BIOS allows the
 -                      kernel to control PCIe config registers of root ports.
 -              force   Use native PCIe PME signaling even if the BIOS refuses
 -                      to allow the kernel to control the relevant PCIe config
 -                      registers.
                nomsi   Do not use MSI for native PCIe PME signaling (this makes
 -                      all PCIe root ports use INTx for everything).
 +                      all PCIe root ports use INTx for all services).
  
        pcmv=           [HW,PCMCIA] BadgePAD 4
  
                        Reserves a hole at the top of the kernel virtual
                        address space.
  
 +      reservelow=     [X86]
 +                      Format: nn[K]
 +                      Set the amount of memory to reserve for BIOS at
 +                      the bottom of the address space.
 +
        reset_devices   [KNL] Force drivers to reset the underlying device
                        during initialization.
  
                        in <PAGE_SIZE> units (needed only for swap files).
                        See  Documentation/power/swsusp-and-swap-files.txt
  
 +      hibernate=      [HIBERNATION]
 +              noresume        Don't check if there's a hibernation image
 +                              present during boot.
 +              nocompress      Don't compress/decompress hibernation images.
 +
        retain_initrd   [RAM] Keep initrd memory after extraction
  
        rhash_entries=  [KNL,NET]
  
        sched_debug     [KNL] Enables verbose scheduler debug messages.
  
 -      scsi_debug_*=   [SCSI]
 -                      See drivers/scsi/scsi_debug.c.
 -
 -      scsi_default_dev_flags=
 -                      [SCSI] SCSI default device flags
 -                      Format: <integer>
 -
 -      scsi_dev_flags= [SCSI] Black/white list entry for vendor and model
 -                      Format: <vendor>:<model>:<flags>
 -                      (flags are integer value)
 -
 -      scsi_logging_level=     [SCSI] a bit mask of logging levels
 -                      See drivers/scsi/scsi_logging.h for bits.  Also
 -                      settable via sysctl at dev.scsi.logging_level
 -                      (/proc/sys/dev/scsi/logging_level).
 -                      There is also a nice 'scsi_logging_level' script in the
 -                      S390-tools package, available for download at
 -                      http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html
 -
 -      scsi_mod.scan=  [SCSI] sync (default) scans SCSI busses as they are
 -                      discovered.  async scans them in kernel threads,
 -                      allowing boot to proceed.  none ignores them, expecting
 -                      user space to do the scan.
 -
        security=       [SECURITY] Choose a security module to enable at boot.
                        If this boot parameter is not specified, only the first
                        security module asking for security registration will be
                        The parameter means the number of CPUs to show,
                        for example 1 means boot CPU only.
  
 -      sim710=         [SCSI,HW]
 -                      See header of drivers/scsi/sim710.c.
 -
        simeth=         [IA-64]
        simscsi=
  
        spia_pedr=
        spia_peddr=
  
 -      st=             [HW,SCSI] SCSI tape parameters (buffers, etc.)
 -                      See Documentation/scsi/st.txt.
 -
        stacktrace      [FTRACE]
                        Enabled the stack tracer on boot up.
  
  
        switches=       [HW,M68k]
  
 -      sym53c416=      [HW,SCSI]
 -                      See header of drivers/scsi/sym53c416.c.
 +      sysfs.deprecated=0|1 [KNL]
 +                      Enable/disable old style sysfs layout for old udev
 +                      on older distributions. When this option is enabled
 +                      very new udev will not work anymore. When this option
 +                      is disabled (or CONFIG_SYSFS_DEPRECATED not compiled)
 +                      in older udev will not work anymore.
 +                      Default depends on CONFIG_SYSFS_DEPRECATED_V2 set in
 +                      the kernel configuration.
  
        sysrq_always_enabled
                        [KNL]
                        neutralize any effect of /proc/sys/kernel/sysrq.
                        Useful for debugging.
  
 -      t128=           [HW,SCSI]
 -                      See header of drivers/scsi/t128.c.
 -
        tdfx=           [HW,DRM]
  
        test_suspend=   [SUSPEND]
                        <deci-seconds>: poll all this frequency
                        0: no polling (default)
  
 -      tmscsim=        [HW,SCSI]
 -                      See comment before function dc390_setup() in
 -                      drivers/scsi/tmscsim.c.
 -
        topology=       [S390]
                        Format: {off | on}
                        Specify if the kernel should make use of the cpu
                        disables clocksource verification at runtime.
                        Used to enable high-resolution timer mode on older
                        hardware, and in virtualized environment.
 +                      [x86] noirqtime: Do not use TSC to do irq accounting.
 +                      Used to run time disable IRQ_TIME_ACCOUNTING on any
 +                      platforms where RDTSC is slow and this accounting
 +                      can add overhead.
  
        turbografx.map[2|3]=    [HW,JOY]
                        TurboGraFX parallel port interface
                        <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
 -                      See header of drivers/scsi/u14-34f.c.
 -
        uhash_entries=  [KNL,NET]
                        Set number of hash buckets for UDP/UDP-Lite connections
  
                        overridden by individual drivers. 0 will hide
                        cursors, 1 will display them.
  
 -      wd33c93=        [HW,SCSI]
 -                      See header of drivers/scsi/wd33c93.c.
 -
 -      wd7000=         [HW,SCSI]
 -                      See header of drivers/scsi/wd7000.c.
 -
        watchdog timers [HW,WDT] For information on watchdog timers,
                        see Documentation/watchdog/watchdog-parameters.txt
                        or other driver-specific files in the
                        aux-ide-disks -- unplug non-primary-master IDE devices
                        nics -- unplug network devices
                        all -- unplug all emulated devices (NICs and IDE disks)
 -                      ignore -- continue loading the Xen platform PCI driver even
 -                              if the version check failed
 +                      unnecessary -- unplugging emulated devices is
 +                              unnecessary even if the host did not respond to
 +                              the unplug protocol
 +                      never -- do not unplug even if version check succeeds
  
        xirc2ps_cs=     [NET,PCMCIA]
                        Format:
diff --combined MAINTAINERS
index 23a4ca9e27f498d5989dc0a4691ab69674050534,68ccde3ddaf212e420e60b984ba17f96aea8ff71..69aa8fe060b30ad65db57b49bb3d3bfa89ada910
@@@ -157,11 -157,9 +157,11 @@@ S:       Maintaine
  F:    drivers/net/r8169.c
  
  8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
 +M:    Greg Kroah-Hartman <gregkh@suse.de>
  L:    linux-serial@vger.kernel.org
  W:    http://serial.sourceforge.net
 -S:    Orphan
 +S:    Maintained
 +T:    quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
  F:    drivers/serial/8250*
  F:    include/linux/serial_8250.h
  
@@@ -456,20 -454,9 +456,20 @@@ L:       linux-rdma@vger.kernel.or
  S:    Maintained
  F:    drivers/infiniband/hw/amso1100/
  
 +ANALOG DEVICES INC ASOC DRIVERS
 +L:    uclinux-dist-devel@blackfin.uclinux.org
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +W:    http://blackfin.uclinux.org/
 +S:    Supported
 +F:    sound/soc/blackfin/*
 +F:    sound/soc/codecs/ad1*
 +F:    sound/soc/codecs/adau*
 +F:    sound/soc/codecs/adav*
 +F:    sound/soc/codecs/ssm*
 +
  AOA (Apple Onboard Audio) ALSA DRIVER
  M:    Johannes Berg <johannes@sipsolutions.net>
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Maintained
  F:    sound/aoa/
@@@ -629,10 -616,10 +629,10 @@@ M:      Richard Purdie <rpurdie@rpsys.net
  S:    Maintained
  
  ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
 -M:    Paulius Zaleckas <paulius.zaleckas@gmail.com>
 +M:    Hans Ulli Kroll <ulli.kroll@googlemail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -T:    git git://gitorious.org/linux-gemini/mainline.git
 -S:    Odd Fixes
 +T:    git git://git.berlios.de/gemini-board
 +S:    Maintained
  F:    arch/arm/mach-gemini/
  
  ARM/EBSA110 MACHINE SUPPORT
@@@ -654,10 -641,9 +654,10 @@@ T:       topgit git://git.openezx.org/openezx
  F:    arch/arm/mach-pxa/ezx.c
  
  ARM/FARADAY FA526 PORT
 -M:    Paulius Zaleckas <paulius.zaleckas@gmail.com>
 +M:    Hans Ulli Kroll <ulli.kroll@googlemail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Odd Fixes
 +S:    Maintained
 +T:    git://git.berlios.de/gemini-board
  F:    arch/arm/mm/*-fa*
  
  ARM/FOOTBRIDGE ARCHITECTURE
@@@ -706,13 -692,6 +706,13 @@@ T:       git git://git.kernel.org/pub/scm/lin
  F:    arch/arm/mach-sa1100/jornada720.c
  F:    arch/arm/mach-sa1100/include/mach/jornada720.h
  
 +ARM/INCOME PXA270 SUPPORT
 +M:    Marek Vasut <marek.vasut@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-pxa/income.c
 +F:    arch/arm/mach-pxa/include/mach-pxa/income.h
 +
  ARM/INTEL IOP32X ARM ARCHITECTURE
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  M:    Dan Williams <dan.j.williams@intel.com>
@@@ -964,51 -943,21 +964,51 @@@ W:      http://www.fluff.org/ben/linux
  S:    Maintained
  F:    arch/arm/mach-s3c6410/
  
 +ARM/S5P ARM ARCHITECTURES
 +M:    Kukjin Kim <kgene.kim@samsung.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-s5p*/
 +
 +ARM/SAMSUNG S5P SERIES FIMC SUPPORT
 +M:    Kyungmin Park <kyungmin.park@samsung.com>
 +M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
 +L:    linux-arm-kernel@lists.infradead.org
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    arch/arm/plat-s5p/dev-fimc*
 +F:    arch/arm/plat-samsung/include/plat/*fimc*
 +F:    drivers/media/video/s5p-fimc/
 +
  ARM/SHMOBILE ARM ARCHITECTURE
  M:    Paul Mundt <lethal@linux-sh.org>
  M:    Magnus Damm <magnus.damm@gmail.com>
  L:    linux-sh@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/genesis-2.6.git
  W:    http://oss.renesas.com
 +Q:    http://patchwork.kernel.org/project/linux-sh/list/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/genesis-2.6.git
  S:    Supported
  F:    arch/arm/mach-shmobile/
  F:    drivers/sh/
  
 +ARM/TELECHIPS ARM ARCHITECTURE
 +M:    "Hans J. Koch" <hjk@linutronix.de>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/plat-tcc/
 +F:    arch/arm/mach-tcc8k/
 +
  ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  
 +ARM/TETON BGA MACHINE SUPPORT
 +M:    Mark F. Brown <mark.brown314@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +
  ARM/THECUS N2100 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1151,13 -1100,6 +1151,13 @@@ W:    http://wireless.kernel.org/en/users/
  S:    Maintained
  F:    drivers/net/wireless/ath/ar9170/
  
 +CARL9170 LINUX COMMUNITY WIRELESS DRIVER
 +M:    Christian Lamparter <chunkeey@googlemail.com>
 +L:    linux-wireless@vger.kernel.org
 +W:    http://wireless.kernel.org/en/users/Drivers/carl9170
 +S:    Maintained
 +F:    drivers/net/wireless/ath/carl9170/
 +
  ATK0110 HWMON DRIVER
  M:    Luca Tettamanti <kronos.it@gmail.com>
  L:    lm-sensors@lm-sensors.org
@@@ -1173,7 -1115,7 +1173,7 @@@ ATLX ETHERNET DRIVER
  M:    Jay Cliburn <jcliburn@gmail.com>
  M:    Chris Snook <chris.snook@gmail.com>
  M:    Jie Yang <jie.yang@atheros.com>
 -L:    atl1-devel@lists.sourceforge.net
 +L:    netdev@vger.kernel.org
  W:    http://sourceforge.net/projects/atl1
  W:    http://atl1.sourceforge.net
  S:    Maintained
@@@ -1258,7 -1200,7 +1258,7 @@@ F:      drivers/auxdisplay
  F:    include/linux/cfag12864b.h
  
  AVR32 ARCHITECTURE
 -M:    Haavard Skinnemoen <hskinnemoen@atmel.com>
 +M:    Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
  W:    http://www.atmel.com/products/AVR32/
  W:    http://avr32linux.org/
  W:    http://avrfreaks.net/
@@@ -1266,7 -1208,7 +1266,7 @@@ S:      Supporte
  F:    arch/avr32/
  
  AVR32/AT32AP MACHINE SUPPORT
 -M:    Haavard Skinnemoen <hskinnemoen@atmel.com>
 +M:    Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
  S:    Supported
  F:    arch/avr32/mach-at32ap/
  
@@@ -1382,19 -1324,16 +1382,19 @@@ F:   drivers/mtd/devices/block2mtd.
  
  BLUETOOTH DRIVERS
  M:    Marcel Holtmann <marcel@holtmann.org>
 +M:    Gustavo F. Padovan <padovan@profusion.mobi>
  L:    linux-bluetooth@vger.kernel.org
  W:    http://www.bluez.org/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git
  S:    Maintained
  F:    drivers/bluetooth/
  
  BLUETOOTH SUBSYSTEM
  M:    Marcel Holtmann <marcel@holtmann.org>
 +M:    Gustavo F. Padovan <padovan@profusion.mobi>
  L:    linux-bluetooth@vger.kernel.org
  W:    http://www.bluez.org/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-2.6.git
  S:    Maintained
  F:    net/bluetooth/
  F:    include/net/bluetooth/
@@@ -1439,13 -1378,6 +1439,13 @@@ L:    linux-scsi@vger.kernel.or
  S:    Supported
  F:    drivers/scsi/bfa/
  
 +BROCADE BNA 10 GIGABIT ETHERNET DRIVER
 +M:    Rasesh Mody <rmody@brocade.com>
 +M:    Debashis Dutt <ddutt@brocade.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/bna/
 +
  BSG (block layer generic sg v4 driver)
  M:    FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
  L:    linux-scsi@vger.kernel.org
@@@ -1493,16 -1425,6 +1493,16 @@@ S:    Maintaine
  F:    Documentation/video4linux/cafe_ccic
  F:    drivers/media/video/cafe_ccic*
  
 +CAIF NETWORK LAYER
 +M:    Sjur Braendeland <sjur.brandeland@stericsson.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    Documentation/networking/caif/
 +F:    drivers/net/caif/
 +F:    include/linux/caif/
 +F:    include/net/caif/
 +F:    net/caif/
 +
  CALGARY x86-64 IOMMU
  M:    Muli Ben-Yehuda <muli@il.ibm.com>
  M:    "Jon D. Mason" <jdmason@kudzu.us>
@@@ -1541,8 -1463,8 +1541,8 @@@ F:      include/linux/can/platform
  
  CELL BROADBAND ENGINE ARCHITECTURE
  M:    Arnd Bergmann <arnd@arndb.de>
 -L:    linuxppc-dev@ozlabs.org
 -L:    cbe-oss-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
 +L:    cbe-oss-dev@lists.ozlabs.org
  W:    http://www.ibm.com/developerworks/power/cell/
  S:    Supported
  F:    arch/powerpc/include/asm/cell*.h
@@@ -1558,8 -1480,6 +1558,8 @@@ T:      git git://git.kernel.org/pub/scm/lin
  S:    Supported
  F:    Documentation/filesystems/ceph.txt
  F:    fs/ceph
 +F:    net/ceph
 +F:    include/linux/ceph
  
  CERTIFIED WIRELESS USB (WUSB) SUBSYSTEM:
  M:    David Vrabel <david.vrabel@csr.com>
@@@ -1603,9 -1523,9 +1603,9 @@@ S:      Supporte
  F:    scripts/checkpatch.pl
  
  CISCO VIC ETHERNET NIC DRIVER
 -M:    Scott Feldman <scofeldm@cisco.com>
  M:    Vasanthy Kolluri <vkolluri@cisco.com>
  M:    Roopa Prabhu <roprabhu@cisco.com>
 +M:    David Wang <dwang2@cisco.com>
  S:    Supported
  F:    drivers/net/enic/
  
@@@ -1736,7 -1656,8 +1736,7 @@@ F:      kernel/cgroup
  F:    mm/*cgroup*
  
  CORETEMP HARDWARE MONITORING DRIVER
 -M:    Rudolf Marek <r.marek@assembler.cz>
 -M:    Huaxu Wan <huaxu.wan@intel.com>
 +M:    Fenghua Yu <fenghua.yu@intel.com>
  L:    lm-sensors@lm-sensors.org
  S:    Maintained
  F:    Documentation/hwmon/coretemp
@@@ -2083,16 -2004,14 +2083,16 @@@ F:   drivers/block/drbd
  F:    lib/lru_cache.c
  F:    Documentation/blockdev/drbd/
  
 -DRIVER CORE, KOBJECTS, AND SYSFS
 +DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS
  M:    Greg Kroah-Hartman <gregkh@suse.de>
  T:    quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
  S:    Supported
  F:    Documentation/kobject.txt
  F:    drivers/base/
  F:    fs/sysfs/
 +F:    fs/debugfs/
  F:    include/linux/kobj*
 +F:    include/linux/debugfs.h
  F:    lib/kobj*
  
  DRM DRIVERS
@@@ -2212,13 -2131,6 +2212,13 @@@ W:    bluesmoke.sourceforge.ne
  S:    Maintained
  F:    drivers/edac/i5400_edac.c
  
 +EDAC-I7300
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-edac@vger.kernel.org
 +W:    bluesmoke.sourceforge.net
 +S:    Maintained
 +F:    drivers/edac/i7300_edac.c
 +
  EDAC-I7CORE
  M:    Mauro Carvalho Chehab <mchehab@redhat.com>
  L:    linux-edac@vger.kernel.org
@@@ -2258,12 -2170,6 +2258,12 @@@ W:    http://acpi4asus.sf.ne
  S:    Maintained
  F:    drivers/platform/x86/eeepc-laptop.c
  
 +EFIFB FRAMEBUFFER DRIVER
 +L:    linux-fbdev@vger.kernel.org
 +M:    Peter Jones <pjones@redhat.com>
 +S:    Maintained
 +F:    drivers/video/efifb.c
 +
  EFS FILESYSTEM
  W:    http://aeschi.ch.eu.org/efs/
  S:    Orphan
@@@ -2276,12 -2182,6 +2276,12 @@@ L:    linux-rdma@vger.kernel.or
  S:    Supported
  F:    drivers/infiniband/hw/ehca/
  
 +EHEA (IBM pSeries eHEA 10Gb ethernet adapter) DRIVER
 +M:    Breno Leitao <leitao@linux.vnet.ibm.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/ehea/
 +
  EMBEDDED LINUX
  M:    Paul Gortmaker <paul.gortmaker@windriver.com>
  M:    Matt Mackall <mpm@selenic.com>
@@@ -2377,12 -2277,6 +2377,12 @@@ S:    Maintaine
  F:    Documentation/hwmon/f71805f
  F:    drivers/hwmon/f71805f.c
  
 +FANOTIFY
 +M:    Eric Paris <eparis@redhat.com>
 +S:    Maintained
 +F:    fs/notify/fanotify/
 +F:    include/linux/fanotify.h
 +
  FARSYNC SYNCHRONOUS DRIVER
  M:    Kevin Curtis <kevin.curtis@farsite.co.uk>
  W:    http://www.farsite.co.uk/
@@@ -2468,13 -2362,13 +2468,13 @@@ F:   include/linux/fb.
  FREESCALE DMA DRIVER
  M:    Li Yang <leoli@freescale.com>
  M:    Zhang Wei <zw@zh-kernel.org>
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    drivers/dma/fsldma.*
  
  FREESCALE I2C CPM DRIVER
  M:    Jochen Friedrich <jochen@scram.de>
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  L:    linux-i2c@vger.kernel.org
  S:    Maintained
  F:    drivers/i2c/busses/i2c-cpm.c
@@@ -2490,7 -2384,7 +2490,7 @@@ F:      drivers/video/imxfb.
  FREESCALE SOC FS_ENET DRIVER
  M:    Pantelis Antoniou <pantelis.antoniou@gmail.com>
  M:    Vitaly Bordug <vbordug@ru.mvista.com>
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/fs_enet/
@@@ -2498,7 -2392,7 +2498,7 @@@ F:      include/linux/fs_enet_pd.
  
  FREESCALE QUICC ENGINE LIBRARY
  M:    Timur Tabi <timur@freescale.com>
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Supported
  F:    arch/powerpc/sysdev/qe_lib/
  F:    arch/powerpc/include/asm/*qe.h
  FREESCALE USB PERIPHERAL DRIVERS
  M:    Li Yang <leoli@freescale.com>
  L:    linux-usb@vger.kernel.org
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    drivers/usb/gadget/fsl*
  
  FREESCALE QUICC ENGINE UCC ETHERNET DRIVER
  M:    Li Yang <leoli@freescale.com>
  L:    netdev@vger.kernel.org
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    drivers/net/ucc_geth*
  
  FREESCALE QUICC ENGINE UCC UART DRIVER
  M:    Timur Tabi <timur@freescale.com>
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Supported
  F:    drivers/serial/ucc_uart.c
  
  FREESCALE SOC SOUND DRIVERS
  M:    Timur Tabi <timur@freescale.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Supported
  F:    sound/soc/fsl/fsl*
  F:    sound/soc/fsl/mpc8610_hpcd.c
@@@ -2587,7 -2481,7 +2587,7 @@@ S:      Supporte
  F:    drivers/scsi/gdt*
  
  GENERIC GPIO I2C DRIVER
 -M:    Haavard Skinnemoen <hskinnemoen@atmel.com>
 +M:    Haavard Skinnemoen <hskinnemoen@gmail.com>
  S:    Supported
  F:    drivers/i2c/busses/i2c-gpio.c
  F:    include/linux/i2c-gpio.h
@@@ -2661,7 -2555,7 +2661,7 @@@ F:      mm/memory-failure.
  F:    mm/hwpoison-inject.c
  
  HYPERVISOR VIRTUAL CONSOLE DRIVER
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Odd Fixes
  F:    drivers/char/hvc_*
  
@@@ -2722,14 -2616,9 +2722,14 @@@ S:    Maintaine
  F:    drivers/media/video/gspca/
  
  HARDWARE MONITORING
 +M:    Jean Delvare <khali@linux-fr.org>
 +M:    Guenter Roeck <guenter.roeck@ericsson.com>
  L:    lm-sensors@lm-sensors.org
  W:    http://www.lm-sensors.org/
 -S:    Orphan
 +T:    quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-hwmon/
 +T:    quilt kernel.org/pub/linux/kernel/people/groeck/linux-staging/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
 +S:    Maintained
  F:    Documentation/hwmon/
  F:    drivers/hwmon/
  F:    include/linux/hwmon*.h
@@@ -2867,6 -2756,11 +2867,6 @@@ S:     Maintaine
  F:    arch/x86/kernel/hpet.c
  F:    arch/x86/include/asm/hpet.h
  
 -HPET: ACPI
 -M:    Bob Picco <bob.picco@hp.com>
 -S:    Maintained
 -F:    drivers/char/hpet.c
 -
  HPFS FILESYSTEM
  M:    Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
  W:    http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
@@@ -2946,12 -2840,6 +2946,12 @@@ M:    Brian King <brking@us.ibm.com
  S:    Supported
  F:    drivers/scsi/ipr.*
  
 +IBM Power Virtual Ethernet Device Driver
 +M:    Santiago Leon <santil@linux.vnet.ibm.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/ibmveth.*
 +
  IBM ServeRAID RAID DRIVER
  P:    Jack Hammer
  M:    Dave Jeffery <ipslinux@adaptec.com>
@@@ -3121,27 -3009,16 +3121,27 @@@ L:   netdev@vger.kernel.or
  S:    Maintained
  F:    drivers/net/ixp2000/
  
 -INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe)
 +INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf)
  M:    Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  M:    Jesse Brandeburg <jesse.brandeburg@intel.com>
  M:    Bruce Allan <bruce.w.allan@intel.com>
 -M:    Alex Duyck <alexander.h.duyck@intel.com>
 +M:    Carolyn Wyborny <carolyn.wyborny@intel.com>
 +M:    Don Skidmore <donald.c.skidmore@intel.com>
 +M:    Greg Rose <gregory.v.rose@intel.com>
  M:    PJ Waskiewicz <peter.p.waskiewicz.jr@intel.com>
 +M:    Alex Duyck <alexander.h.duyck@intel.com>
  M:    John Ronciak <john.ronciak@intel.com>
  L:    e1000-devel@lists.sourceforge.net
  W:    http://e1000.sourceforge.net/
  S:    Supported
 +F:    Documentation/networking/e100.txt
 +F:    Documentation/networking/e1000.txt
 +F:    Documentation/networking/e1000e.txt
 +F:    Documentation/networking/igb.txt
 +F:    Documentation/networking/igbvf.txt
 +F:    Documentation/networking/ixgb.txt
 +F:    Documentation/networking/ixgbe.txt
 +F:    Documentation/networking/ixgbevf.txt
  F:    drivers/net/e100.c
  F:    drivers/net/e1000/
  F:    drivers/net/e1000e/
@@@ -3149,7 -3026,6 +3149,7 @@@ F:      drivers/net/igb
  F:    drivers/net/igbvf/
  F:    drivers/net/ixgb/
  F:    drivers/net/ixgbe/
 +F:    drivers/net/ixgbevf/
  
  INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
  L:    linux-wireless@vger.kernel.org
@@@ -3210,7 -3086,7 +3210,7 @@@ F:      drivers/net/ioc3-eth.
  
  IOC3 SERIAL DRIVER
  M:    Pat Gefre <pfg@sgi.com>
 -L:    linux-mips@linux-mips.org
 +L:    linux-serial@vger.kernel.org
  S:    Maintained
  F:    drivers/serial/ioc3_serial.c
  
@@@ -3287,12 -3163,6 +3287,12 @@@ F:    drivers/net/irda
  F:    include/net/irda/
  F:    net/irda/
  
 +IRQ SUBSYSTEM
 +M:    Thomas Gleixner <tglx@linutronix.de>
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git irq/core
 +F:    kernel/irq/
 +
  ISAPNP
  M:    Jaroslav Kysela <perex@perex.cz>
  S:    Maintained
@@@ -3385,12 -3255,6 +3385,12 @@@ F:    fs/jbd*
  F:    include/linux/ext*jbd*.h
  F:    include/linux/jbd*.h
  
 +JSM Neo PCI based serial card
 +M:    Breno Leitao <leitao@linux.vnet.ibm.com>
 +L:    linux-serial@vger.kernel.org
 +S:    Maintained
 +F:    drivers/serial/jsm/
 +
  K8TEMP HARDWARE MONITORING DRIVER
  M:    Rudolf Marek <r.marek@assembler.cz>
  L:    lm-sensors@lm-sensors.org
@@@ -3441,7 -3305,7 +3441,7 @@@ F:      scripts/package
  
  KERNEL JANITORS
  L:    kernel-janitors@vger.kernel.org
- W:    http://janitor.kernelnewbies.org/
+ W:    http://kernelnewbies.org/KernelJanitors
  S:    Odd Fixes
  
  KERNEL NFSD, SUNRPC, AND LOCKD SERVERS
@@@ -3509,7 -3373,7 +3509,7 @@@ F:      drivers/s390/kvm
  
  KEXEC
  M:    Eric Biederman <ebiederm@xmission.com>
 -W:    http://ftp.kernel.org/pub/linux/kernel/people/horms/kexec-tools/
 +W:    http://kernel.org/pub/linux/utils/kernel/kexec/
  L:    kexec@lists.infradead.org
  S:    Maintained
  F:    include/linux/kexec.h
@@@ -3603,9 -3467,9 +3603,9 @@@ F:      drivers/usb/misc/legousbtower.
  
  LGUEST
  M:    Rusty Russell <rusty@rustcorp.com.au>
 -L:    lguest@ozlabs.org
 +L:    lguest@lists.ozlabs.org
  W:    http://lguest.ozlabs.org/
 -S:    Maintained
 +S:    Odd Fixes
  F:    Documentation/lguest/
  F:    arch/x86/lguest/
  F:    drivers/lguest/
@@@ -3622,7 -3486,7 +3622,7 @@@ LINUX FOR POWERPC (32-BIT AND 64-BIT
  M:    Benjamin Herrenschmidt <benh@kernel.crashing.org>
  M:    Paul Mackerras <paulus@samba.org>
  W:    http://www.penguinppc.org/
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  Q:    http://patchwork.ozlabs.org/project/linuxppc-dev/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git
  S:    Supported
@@@ -3632,14 -3496,14 +3632,14 @@@ F:   arch/powerpc
  LINUX FOR POWER MACINTOSH
  M:    Benjamin Herrenschmidt <benh@kernel.crashing.org>
  W:    http://www.penguinppc.org/
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    arch/powerpc/platforms/powermac/
  F:    drivers/macintosh/
  
  LINUX FOR POWERPC EMBEDDED MPC5XXX
  M:    Grant Likely <grant.likely@secretlab.ca>
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  T:    git git://git.secretlab.ca/git/linux-2.6.git
  S:    Maintained
  F:    arch/powerpc/platforms/512x/
@@@ -3649,7 -3513,7 +3649,7 @@@ LINUX FOR POWERPC EMBEDDED PPC4X
  M:    Josh Boyer <jwboyer@linux.vnet.ibm.com>
  M:    Matt Porter <mporter@kernel.crashing.org>
  W:    http://www.penguinppc.org/
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jwboyer/powerpc-4xx.git
  S:    Maintained
  F:    arch/powerpc/platforms/40x/
@@@ -3658,7 -3522,7 +3658,7 @@@ F:      arch/powerpc/platforms/44x
  LINUX FOR POWERPC EMBEDDED XILINX VIRTEX
  M:    Grant Likely <grant.likely@secretlab.ca>
  W:    http://wiki.secretlab.ca/index.php/Linux_on_Xilinx_Virtex
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  T:    git git://git.secretlab.ca/git/linux-2.6.git
  S:    Maintained
  F:    arch/powerpc/*/*virtex*
@@@ -3668,20 -3532,20 +3668,20 @@@ LINUX FOR POWERPC EMBEDDED PPC8X
  M:    Vitaly Bordug <vitb@kernel.crashing.org>
  M:    Marcelo Tosatti <marcelo@kvack.org>
  W:    http://www.penguinppc.org/
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    arch/powerpc/platforms/8xx/
  
  LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
  M:    Kumar Gala <galak@kernel.crashing.org>
  W:    http://www.penguinppc.org/
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    arch/powerpc/platforms/83xx/
  
  LINUX FOR POWERPC PA SEMI PWRFICIENT
  M:    Olof Johansson <olof@lixom.net>
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    arch/powerpc/platforms/pasemi/
  F:    drivers/*/*pasemi*
@@@ -3870,8 -3734,9 +3870,8 @@@ W:      http://www.syskonnect.co
  S:    Supported
  
  MATROX FRAMEBUFFER DRIVER
 -M:    Petr Vandrovec <vandrove@vc.cvut.cz>
  L:    linux-fbdev@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    drivers/video/matrox/matroxfb_*
  F:    include/linux/matroxfb.h
  
@@@ -3995,8 -3860,10 +3995,8 @@@ F:     Documentation/serial/moxa-smarti
  F:    drivers/char/mxser.*
  
  MSI LAPTOP SUPPORT
 -M:    Lennart Poettering <mzxreary@0pointer.de>
 +M:    Lee, Chun-Yi <jlee@novell.com>
  L:    platform-driver-x86@vger.kernel.org
 -W:    https://tango.0pointer.de/mailman/listinfo/s270-linux
 -W:    http://0pointer.de/lennart/tchibo.html
  S:    Maintained
  F:    drivers/platform/x86/msi-laptop.c
  
@@@ -4013,10 -3880,8 +4013,10 @@@ S:    Supporte
  F:    drivers/mfd/
  
  MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM
 -S:    Orphan
 +M:    Chris Ball <cjb@laptop.org>
  L:    linux-mmc@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
 +S:    Maintained
  F:    drivers/mmc/
  F:    include/linux/mmc/
  
@@@ -4033,12 -3898,13 +4033,12 @@@ F:   Documentation/sound/oss/MultiSoun
  F:    sound/oss/msnd*
  
  MULTITECH MULTIPORT CARD (ISICOM)
 -M:    Jiri Slaby <jirislaby@gmail.com>
 -S:    Maintained
 +S:    Orphan
  F:    drivers/char/isicom.c
  F:    include/linux/isicom.h
  
  MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
 -M:    Felipe Balbi <felipe.balbi@nokia.com>
 +M:    Felipe Balbi <balbi@ti.com>
  L:    linux-usb@vger.kernel.org
  T:    git git://gitorious.org/usb/usb.git
  S:    Maintained
@@@ -4058,8 -3924,8 +4058,8 @@@ S:      Maintaine
  F:    drivers/net/natsemi.c
  
  NCP FILESYSTEM
 -M:    Petr Vandrovec <vandrove@vc.cvut.cz>
 -S:    Maintained
 +M:    Petr Vandrovec <petr@vandrovec.name>
 +S:    Odd Fixes
  F:    fs/ncpfs/
  
  NCR DUAL 700 SCSI DRIVER (MICROCHANNEL)
@@@ -4336,7 -4202,7 +4336,7 @@@ S:      Maintaine
  F:    drivers/char/hw_random/omap-rng.c
  
  OMAP USB SUPPORT
 -M:    Felipe Balbi <felipe.balbi@nokia.com>
 +M:    Felipe Balbi <balbi@ti.com>
  M:    David Brownell <dbrownell@users.sourceforge.net>
  L:    linux-usb@vger.kernel.org
  L:    linux-omap@vger.kernel.org
@@@ -4422,12 -4288,13 +4422,12 @@@ F:   Documentation/filesystems/dlmfs.tx
  F:    fs/ocfs2/
  
  ORINOCO DRIVER
 -M:    Pavel Roskin <proski@gnu.org>
 -M:    David Gibson <hermes@gibson.dropbear.id.au>
  L:    linux-wireless@vger.kernel.org
  L:    orinoco-users@lists.sourceforge.net
  L:    orinoco-devel@lists.sourceforge.net
 +W:    http://linuxwireless.org/en/users/Drivers/orinoco
  W:    http://www.nongnu.org/orinoco/
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/orinoco/
  
  OSD LIBRARY and FILESYSTEM
@@@ -4460,15 -4327,6 +4460,15 @@@ L:    linux-i2c@vger.kernel.or
  S:    Maintained
  F:    drivers/i2c/busses/i2c-pasemi.c
  
 +PADATA PARALLEL EXECUTION MECHANISM
 +M:    Steffen Klassert <steffen.klassert@secunet.com>
 +L:    linux-kernel@vger.kernel.org
 +L:    linux-crypto@vger.kernel.org
 +S:    Maintained
 +F:    kernel/padata.c
 +F:    include/linux/padata.h
 +F:    Documentation/padata.txt
 +
  PANASONIC LAPTOP ACPI EXTRAS DRIVER
  M:    Harald Welte <laforge@gnumonks.org>
  L:    platform-driver-x86@vger.kernel.org
@@@ -4535,25 -4393,12 +4535,25 @@@ M:   Jim Cromie <jim.cromie@gmail.com
  S:    Maintained
  F:    drivers/char/pc8736x_gpio.c
  
 +PC87427 HARDWARE MONITORING DRIVER
 +M:    Jean Delvare <khali@linux-fr.org>
 +L:    lm-sensors@lm-sensors.org
 +S:    Maintained
 +F:    Documentation/hwmon/pc87427
 +F:    drivers/hwmon/pc87427.c
 +
  PCA9532 LED DRIVER
  M:    Riku Voipio <riku.voipio@iki.fi>
  S:    Maintained
  F:    drivers/leds/leds-pca9532.c
  F:    include/linux/leds-pca9532.h
  
 +PCA9541 I2C BUS MASTER SELECTOR DRIVER
 +M:    Guenter Roeck <guenter.roeck@ericsson.com>
 +L:    linux-i2c@vger.kernel.org
 +S:    Maintained
 +F:    drivers/i2c/muxes/pca9541.c
 +
  PCA9564/PCA9665 I2C BUS DRIVER
  M:    Wolfram Sang <w.sang@pengutronix.de>
  L:    linux-i2c@vger.kernel.org
@@@ -4602,13 -4447,6 +4602,13 @@@ L:    netdev@vger.kernel.or
  S:    Maintained
  F:    drivers/net/pcnet32.c
  
 +PCRYPT PARALLEL CRYPTO ENGINE
 +M:    Steffen Klassert <steffen.klassert@secunet.com>
 +L:    linux-crypto@vger.kernel.org
 +S:    Maintained
 +F:    crypto/pcrypt.c
 +F:    include/crypto/pcrypt.h
 +
  PER-TASK DELAY ACCOUNTING
  M:    Balbir Singh <balbir@linux.vnet.ibm.com>
  S:    Maintained
@@@ -4637,14 -4475,6 +4637,14 @@@ L:    linux-abi-devel@lists.sourceforge.ne
  S:    Maintained
  F:    include/linux/personality.h
  
 +PHONET PROTOCOL
 +M:    Remi Denis-Courmont <remi.denis-courmont@nokia.com>
 +S:    Supported
 +F:    Documentation/networking/phonet.txt
 +F:    include/linux/phonet.h
 +F:    include/net/phonet/
 +F:    net/phonet/
 +
  PHRAM MTD DRIVER
  M:    Joern Engel <joern@lazybastard.org>
  L:    linux-mtd@lists.infradead.org
@@@ -4742,7 -4572,7 +4742,7 @@@ F:      include/linux/preempt.
  PRISM54 WIRELESS DRIVER
  M:    "Luis R. Rodriguez" <mcgrof@gmail.com>
  L:    linux-wireless@vger.kernel.org
 -W:    http://prism54.org
 +W:    http://wireless.kernel.org/en/users/Drivers/p54
  S:    Obsolete
  F:    drivers/net/wireless/prism54/
  
@@@ -4755,14 -4585,14 +4755,14 @@@ F:   drivers/ata/sata_promise.
  PS3 NETWORK SUPPORT
  M:    Geoff Levand <geoff@infradead.org>
  L:    netdev@vger.kernel.org
 -L:    cbe-oss-dev@ozlabs.org
 +L:    cbe-oss-dev@lists.ozlabs.org
  S:    Maintained
  F:    drivers/net/ps3_gelic_net.*
  
  PS3 PLATFORM SUPPORT
  M:    Geoff Levand <geoff@infradead.org>
 -L:    linuxppc-dev@ozlabs.org
 -L:    cbe-oss-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
 +L:    cbe-oss-dev@lists.ozlabs.org
  S:    Maintained
  F:    arch/powerpc/boot/ps3*
  F:    arch/powerpc/include/asm/lv1call.h
@@@ -4776,7 -4606,7 +4776,7 @@@ F:      sound/ppc/snd_ps3
  
  PS3VRAM DRIVER
  M:    Jim Paris <jim@jtan.com>
 -L:    cbe-oss-dev@ozlabs.org
 +L:    cbe-oss-dev@lists.ozlabs.org
  S:    Maintained
  F:    drivers/block/ps3vram.c
  
@@@ -4894,15 -4724,6 +4894,15 @@@ F:    fs/qnx4
  F:    include/linux/qnx4_fs.h
  F:    include/linux/qnxtypes.h
  
 +RADOS BLOCK DEVICE (RBD)
 +F:    include/linux/qnxtypes.h
 +M:    Yehuda Sadeh <yehuda@hq.newdream.net>
 +M:    Sage Weil <sage@newdream.net>
 +M:    ceph-devel@vger.kernel.org
 +S:    Supported
 +F:    drivers/block/rbd.c
 +F:    drivers/block/rbd_types.h
 +
  RADEON FRAMEBUFFER DISPLAY DRIVER
  M:    Benjamin Herrenschmidt <benh@kernel.crashing.org>
  L:    linux-fbdev@vger.kernel.org
@@@ -4952,7 -4773,6 +4952,7 @@@ RCUTORTURE MODUL
  M:    Josh Triplett <josh@freedesktop.org>
  M:    "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
  S:    Supported
 +T:    git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
  F:    Documentation/RCU/torture.txt
  F:    kernel/rcutorture.c
  
@@@ -4977,7 -4797,6 +4977,7 @@@ M:      Dipankar Sarma <dipankar@in.ibm.com
  M:    "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
  W:    http://www.rdrop.com/users/paulmck/rclock/
  S:    Supported
 +T:    git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git
  F:    Documentation/RCU/
  F:    include/linux/rcu*
  F:    include/linux/srcu*
@@@ -4985,10 -4804,12 +4985,10 @@@ F:   kernel/rcu
  F:    kernel/srcu*
  X:    kernel/rcutorture.c
  
 -REAL TIME CLOCK DRIVER
 +REAL TIME CLOCK DRIVER (LEGACY)
  M:    Paul Gortmaker <p_gortmaker@yahoo.com>
  S:    Maintained
 -F:    Documentation/rtc.txt
 -F:    drivers/rtc/
 -F:    include/linux/rtc.h
 +F:    drivers/char/rtc.c
  
  REAL TIME CLOCK (RTC) SUBSYSTEM
  M:    Alessandro Zummo <a.zummo@towertech.it>
@@@ -5128,12 -4949,6 +5128,12 @@@ F:    drivers/media/common/saa7146
  F:    drivers/media/video/*7146*
  F:    include/media/*7146*
  
 +SAMSUNG AUDIO (ASoC) DRIVERS
 +M:    Jassi Brar <jassi.brar@samsung.com>
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Supported
 +F:    sound/soc/s3c24xx
 +
  TLG2300 VIDEO4LINUX-2 DRIVER
  M:    Huang Shijie <shijie8@gmail.com>
  M:    Kang Yong <kangyong@telegent.com>
@@@ -5231,15 -5046,13 +5231,15 @@@ S:   Maintaine
  F:    drivers/mmc/host/sdricoh_cs.c
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER
 -S:    Orphan
 +M:    Chris Ball <cjb@laptop.org>
  L:    linux-mmc@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
 +S:    Maintained
  F:    drivers/mmc/host/sdhci.*
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF)
  M:    Anton Vorontsov <avorontsov@ru.mvista.com>
 -L:    linuxppc-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  L:    linux-mmc@vger.kernel.org
  S:    Maintained
  F:    drivers/mmc/host/sdhci-of.*
@@@ -5457,13 -5270,6 +5457,13 @@@ S:    Maintaine
  F:    Documentation/hwmon/smm665
  F:    drivers/hwmon/smm665.c
  
 +SMSC EMC2103 HARDWARE MONITOR DRIVER
 +M:    Steve Glendinning <steve.glendinning@smsc.com>
 +L:    lm-sensors@lm-sensors.org
 +S:    Supported
 +F:    Documentation/hwmon/emc2103
 +F:    drivers/hwmon/emc2103.c
 +
  SMSC47B397 HARDWARE MONITOR DRIVER
  M:    "Mark M. Hoffman" <mhoffman@lightlink.com>
  L:    lm-sensors@lm-sensors.org
@@@ -5656,8 -5462,8 +5656,8 @@@ F:      drivers/net/spider_net
  
  SPU FILE SYSTEM
  M:    Jeremy Kerr <jk@ozlabs.org>
 -L:    linuxppc-dev@ozlabs.org
 -L:    cbe-oss-dev@ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
 +L:    cbe-oss-dev@lists.ozlabs.org
  W:    http://www.ibm.com/developerworks/power/cell/
  S:    Supported
  F:    Documentation/filesystems/spufs.txt
@@@ -6032,14 -5838,6 +6032,14 @@@ S:    Maintaine
  F:    Documentation/usb/acm.txt
  F:    drivers/usb/class/cdc-acm.*
  
 +USB ATTACHED SCSI
 +M:    Matthew Wilcox <willy@linux.intel.com>
 +M:    Sarah Sharp <sarah.a.sharp@linux.intel.com>
 +L:    linux-usb@vger.kernel.org
 +L:    linux-scsi@vger.kernel.org
 +S:    Supported
 +F:    drivers/usb/storage/uas.c
 +
  USB BLOCK DRIVER (UB ub)
  M:    Pete Zaitcev <zaitcev@redhat.com>
  L:    linux-usb@vger.kernel.org
@@@ -6548,21 -6346,21 +6548,21 @@@ S:   Maintaine
  F:    drivers/input/misc/wistron_btns.c
  
  WL1251 WIRELESS DRIVER
 -M:    Kalle Valo <kalle.valo@iki.fi>
 +M:    Kalle Valo <kvalo@adurom.com>
  L:    linux-wireless@vger.kernel.org
  W:    http://wireless.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
 -F:    drivers/net/wireless/wl12xx/*
 -X:    drivers/net/wireless/wl12xx/wl1271*
 +F:    drivers/net/wireless/wl1251/*
  
  WL1271 WIRELESS DRIVER
  M:    Luciano Coelho <luciano.coelho@nokia.com>
  L:    linux-wireless@vger.kernel.org
  W:    http://wireless.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git
  S:    Maintained
  F:    drivers/net/wireless/wl12xx/wl1271*
 +F:    include/linux/wl12xx.h
  
  WL3501 WIRELESS PCMCIA CARD DRIVER
  M:    Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
@@@ -6581,13 -6379,10 +6581,13 @@@ S:   Supporte
  F:    drivers/input/touchscreen/*wm97*
  F:    include/linux/wm97xx.h
  
 -WOLFSON MICROELECTRONICS PMIC DRIVERS
 +WOLFSON MICROELECTRONICS DRIVERS
  M:    Mark Brown <broonie@opensource.wolfsonmicro.com>
 +M:    Ian Lartey <ian@opensource.wolfsonmicro.com>
 +M:    Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
 +T:    git git://opensource.wolfsonmicro.com/linux-2.6-asoc
  T:    git git://opensource.wolfsonmicro.com/linux-2.6-audioplus
 -W:    http://opensource.wolfsonmicro.com/node/8
 +W:    http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices
  S:    Supported
  F:    Documentation/hwmon/wm83??
  F:    drivers/leds/leds-wm83*.c
@@@ -6600,8 -6395,8 +6600,8 @@@ F:      drivers/watchdog/wm83*_wdt.
  F:    include/linux/mfd/wm831x/
  F:    include/linux/mfd/wm8350/
  F:    include/linux/mfd/wm8400*
 -F:    sound/soc/codecs/wm8350.*
 -F:    sound/soc/codecs/wm8400.*
 +F:    include/sound/wm????.h
 +F:    sound/soc/codecs/wm*
  
  X.25 NETWORK LAYER
  M:    Andrew Hendry <andrew.hendry@gmail.com>
@@@ -6709,20 -6504,6 +6709,20 @@@ M:    "Maciej W. Rozycki" <macro@linux-mip
  S:    Maintained
  F:    drivers/serial/zs.*
  
 +GRE DEMULTIPLEXER DRIVER
 +M:    Dmitry Kozlov <xeb@mail.ru>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    net/ipv4/gre.c
 +F:    include/net/gre.h
 +
 +PPTP DRIVER
 +M:    Dmitry Kozlov <xeb@mail.ru>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/pptp.c
 +W:    http://sourceforge.net/projects/accel-pptp
 +
  THE REST
  M:    Linus Torvalds <torvalds@linux-foundation.org>
  L:    linux-kernel@vger.kernel.org
diff --combined arch/arm/Kconfig
index 3849887157e72050188f7b627ece321ffe771e60,4971b2a24e964ea75d57095da79fe50c5c49af94..b64e465ac49ce4748fb2707206fcdbfe0d075de0
@@@ -19,17 -19,13 +19,17 @@@ config AR
        select HAVE_KPROBES if (!XIP_KERNEL)
        select HAVE_KRETPROBES if (HAVE_KPROBES)
        select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
 +      select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
 +      select HAVE_DYNAMIC_FTRACE if (!XIP_KERNEL)
        select HAVE_GENERIC_DMA_COHERENT
        select HAVE_KERNEL_GZIP
        select HAVE_KERNEL_LZO
        select HAVE_KERNEL_LZMA
 +      select HAVE_IRQ_WORK
        select HAVE_PERF_EVENTS
        select PERF_USE_VMALLOC
        select HAVE_REGS_AND_STACK_ACCESS_API
 +      select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V7))
        help
          The ARM series is a line of low-power-consumption RISC chip designs
          licensed by ARM Ltd and targeted at embedded applications and
@@@ -149,9 -145,6 +149,9 @@@ config ARCH_HAS_CPUFRE
          and that the relevant menu configurations are displayed for
          it.
  
 +config ARCH_HAS_CPU_IDLE_WAIT
 +       def_bool y
 +
  config GENERIC_HWEIGHT
        bool
        default y
@@@ -278,6 -271,7 +278,6 @@@ config ARCH_AT9
        bool "Atmel AT91"
        select ARCH_REQUIRE_GPIOLIB
        select HAVE_CLK
 -      select ARCH_USES_GETTIMEOFFSET
        help
          This enables support for systems based on the Atmel AT91RM9200,
          AT91SAM9 and AT91CAP9 processors.
@@@ -517,7 -511,6 +517,7 @@@ config ARCH_MM
        select GENERIC_CLOCKEVENTS
        select TICK_ONESHOT
        select PLAT_PXA
 +      select SPARSE_IRQ
        help
          Support for Marvell's PXA168/PXA910(MMP) and MMP2 processor line.
  
@@@ -595,7 -588,6 +595,7 @@@ config ARCH_PX
        select GENERIC_CLOCKEVENTS
        select TICK_ONESHOT
        select PLAT_PXA
 +      select SPARSE_IRQ
        help
          Support for Intel/Marvell's PXA2xx/PXA3xx processor line.
  
@@@ -652,7 -644,6 +652,7 @@@ config ARCH_S3C241
        select ARCH_HAS_CPUFREQ
        select HAVE_CLK
        select ARCH_USES_GETTIMEOFFSET
 +      select HAVE_S3C2410_I2C
        help
          Samsung S3C2410X CPU based systems, such as the Simtec Electronics
          BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
@@@ -682,23 -673,17 +682,23 @@@ config ARCH_S3C64X
        select S3C_DEV_NAND
        select USB_ARCH_HAS_OHCI
        select SAMSUNG_GPIOLIB_4BIT
 +      select HAVE_S3C2410_I2C
 +      select HAVE_S3C2410_WATCHDOG
        help
          Samsung S3C64XX series based systems
  
 -config ARCH_S5P6440
 -      bool "Samsung S5P6440"
 +config ARCH_S5P64X0
 +      bool "Samsung S5P6440 S5P6450"
        select CPU_V6
        select GENERIC_GPIO
        select HAVE_CLK
 +      select HAVE_S3C2410_WATCHDOG
        select ARCH_USES_GETTIMEOFFSET
 +      select HAVE_S3C2410_I2C
 +      select HAVE_S3C_RTC
        help
 -        Samsung S5P6440 CPU based systems
 +        Samsung S5P64X0 CPU based systems, such as the Samsung SMDK6440,
 +        SMDK6450.
  
  config ARCH_S5P6442
        bool "Samsung S5P6442"
        select GENERIC_GPIO
        select HAVE_CLK
        select ARCH_USES_GETTIMEOFFSET
 +      select HAVE_S3C2410_WATCHDOG
        help
          Samsung S5P6442 CPU based systems
  
@@@ -717,9 -701,6 +717,9 @@@ config ARCH_S5PC10
        select CPU_V7
        select ARM_L1_CACHE_SHIFT_6
        select ARCH_USES_GETTIMEOFFSET
 +      select HAVE_S3C2410_I2C
 +      select HAVE_S3C_RTC
 +      select HAVE_S3C2410_WATCHDOG
        help
          Samsung S5PC100 series based systems
  
@@@ -730,21 -711,9 +730,21 @@@ config ARCH_S5PV21
        select HAVE_CLK
        select ARM_L1_CACHE_SHIFT_6
        select ARCH_USES_GETTIMEOFFSET
 +      select HAVE_S3C2410_I2C
 +      select HAVE_S3C_RTC
 +      select HAVE_S3C2410_WATCHDOG
        help
          Samsung S5PV210/S5PC110 series based systems
  
 +config ARCH_S5PV310
 +      bool "Samsung S5PV310/S5PC210"
 +      select CPU_V7
 +      select GENERIC_GPIO
 +      select HAVE_CLK
 +      select GENERIC_CLOCKEVENTS
 +      help
 +        Samsung S5PV310 series based systems
 +
  config ARCH_SHARK
        bool "Shark"
        select CPU_SA110
          Support for the StrongARM based Digital DNARD machine, also known
          as "Shark" (<http://www.shark-linux.de/shark.html>).
  
 +config ARCH_TCC_926
 +      bool "Telechips TCC ARM926-based systems"
 +      select CPU_ARM926T
 +      select HAVE_CLK
 +      select COMMON_CLKDEV
 +      select GENERIC_CLOCKEVENTS
 +      help
 +        Support for Telechips TCC ARM926-based systems.
 +
  config ARCH_LH7A40X
        bool "Sharp LH7A40X"
        select CPU_ARM922T
@@@ -934,8 -894,6 +934,8 @@@ source "arch/arm/plat-s5p/Kconfig
  
  source "arch/arm/plat-spear/Kconfig"
  
 +source "arch/arm/plat-tcc/Kconfig"
 +
  if ARCH_S3C2410
  source "arch/arm/mach-s3c2400/Kconfig"
  source "arch/arm/mach-s3c2410/Kconfig"
@@@ -949,7 -907,7 +949,7 @@@ if ARCH_S3C64X
  source "arch/arm/mach-s3c64xx/Kconfig"
  endif
  
 -source "arch/arm/mach-s5p6440/Kconfig"
 +source "arch/arm/mach-s5p64x0/Kconfig"
  
  source "arch/arm/mach-s5p6442/Kconfig"
  
@@@ -957,8 -915,6 +957,8 @@@ source "arch/arm/mach-s5pc100/Kconfig
  
  source "arch/arm/mach-s5pv210/Kconfig"
  
 +source "arch/arm/mach-s5pv310/Kconfig"
 +
  source "arch/arm/mach-shmobile/Kconfig"
  
  source "arch/arm/plat-stmp3xxx/Kconfig"
@@@ -1023,7 -979,7 +1023,7 @@@ endi
  
  config ARM_ERRATA_411920
        bool "ARM errata: Invalidation of the Instruction Cache operation can fail"
 -      depends on CPU_V6 && !SMP
 +      depends on CPU_V6
        help
          Invalidation of the Instruction Cache operation can
          fail. This erratum is present in 1136 (before r1p4), 1156 and 1176.
@@@ -1071,32 -1027,6 +1071,32 @@@ config ARM_ERRATA_46007
          ACTLR register. Note that setting specific bits in the ACTLR register
          may not be available in non-secure mode.
  
 +config ARM_ERRATA_742230
 +      bool "ARM errata: DMB operation may be faulty"
 +      depends on CPU_V7 && SMP
 +      help
 +        This option enables the workaround for the 742230 Cortex-A9
 +        (r1p0..r2p2) erratum. Under rare circumstances, a DMB instruction
 +        between two write operations may not ensure the correct visibility
 +        ordering of the two writes. This workaround sets a specific bit in
 +        the diagnostic register of the Cortex-A9 which causes the DMB
 +        instruction to behave as a DSB, ensuring the correct behaviour of
 +        the two writes.
 +
 +config ARM_ERRATA_742231
 +      bool "ARM errata: Incorrect hazard handling in the SCU may lead to data corruption"
 +      depends on CPU_V7 && SMP
 +      help
 +        This option enables the workaround for the 742231 Cortex-A9
 +        (r2p0..r2p2) erratum. Under certain conditions, specific to the
 +        Cortex-A9 MPCore micro-architecture, two CPUs working in SMP mode,
 +        accessing some data located in the same cache line, may get corrupted
 +        data due to bad handling of the address hazard when the line gets
 +        replaced from one of the CPUs at the same time as another CPU is
 +        accessing it. This workaround sets specific bits in the diagnostic
 +        register of the Cortex-A9 which reduces the linefill issuing
 +        capabilities of the processor.
 +
  config PL310_ERRATA_588369
        bool "Clean & Invalidate maintenance operations do not invalidate clean lines"
        depends on CACHE_L2X0 && ARCH_OMAP4
           is not correctly implemented in PL310 as clean lines are not
           invalidated as a result of these operations. Note that this errata
           uses Texas Instrument's secure monitor api.
 +
 +config ARM_ERRATA_720789
 +      bool "ARM errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a faulty ASID"
 +      depends on CPU_V7 && SMP
 +      help
 +        This option enables the workaround for the 720789 Cortex-A9 (prior to
 +        r2p0) erratum. A faulty ASID can be sent to the other CPUs for the
 +        broadcasted CP15 TLB maintenance operations TLBIASIDIS and TLBIMVAIS.
 +        As a consequence of this erratum, some TLB entries which should be
 +        invalidated are not, resulting in an incoherency in the system page
 +        tables. The workaround changes the TLB flushing routines to invalidate
 +        entries regardless of the ASID.
 +
 +config ARM_ERRATA_743622
 +      bool "ARM errata: Faulty hazard checking in the Store Buffer may lead to data corruption"
 +      depends on CPU_V7
 +      help
 +        This option enables the workaround for the 743622 Cortex-A9
 +        (r2p0..r2p2) erratum. Under very rare conditions, a faulty
 +        optimisation in the Cortex-A9 Store Buffer may lead to data
 +        corruption. This workaround sets a specific bit in the diagnostic
 +        register of the Cortex-A9 which disables the Store Buffer
 +        optimisation, preventing the defect from occurring. This has no
 +        visible impact on the overall performance or power consumption of the
 +        processor.
 +
  endmenu
  
  source "arch/arm/common/Kconfig"
@@@ -1202,13 -1106,13 +1202,13 @@@ source "kernel/time/Kconfig
  
  config SMP
        bool "Symmetric Multi-Processing (EXPERIMENTAL)"
 -      depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\
 -               MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\
 -               ARCH_U8500 || ARCH_VEXPRESS_CA9X4 || ARCH_TEGRA)
 +      depends on EXPERIMENTAL
        depends on GENERIC_CLOCKEVENTS
 +      depends on REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP || \
 +               MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\
 +               ARCH_S5PV310 || ARCH_TEGRA || ARCH_U8500 || ARCH_VEXPRESS_CA9X4
        select USE_GENERIC_SMP_HELPERS
 -      select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500 || \
 -               ARCH_VEXPRESS_CA9X4 || ARCH_TEGRA)
 +      select HAVE_ARM_SCU
        help
          This enables support for systems with more than one CPU. If you have
          a system with only one CPU, like most personal computers, say N. If
  
          See also <file:Documentation/i386/IO-APIC.txt>,
          <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
-         <http://www.linuxdoc.org/docs.html#howto>.
+         <http://tldp.org/HOWTO/SMP-HOWTO.html>.
  
          If you don't know what to do here, say N.
  
 +config SMP_ON_UP
 +      bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)"
 +      depends on EXPERIMENTAL
 +      depends on SMP && !XIP && !THUMB2_KERNEL
 +      default y
 +      help
 +        SMP kernels contain instructions which fail on non-SMP processors.
 +        Enabling this option allows the kernel to modify itself to make
 +        these instructions safe.  Disabling it allows about 1K of space
 +        savings.
 +
 +        If you don't know what to do here, say Y.
 +
  config HAVE_ARM_SCU
        bool
        depends on SMP
@@@ -1289,9 -1180,12 +1289,9 @@@ config HOTPLUG_CP
  
  config LOCAL_TIMERS
        bool "Use local timer interrupts"
 -      depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \
 -              REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \
 -              ARCH_U8500 || ARCH_VEXPRESS_CA9X4 || ARCH_TEGRA)
 +      depends on SMP
        default y
 -      select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_VEXPRESS || ARCH_OMAP4 || \\
 -              ARCH_U8500 || ARCH_TEGRA
 +      select HAVE_ARM_TWD
        help
          Enable support for local timers on SMP platforms, rather then the
          legacy IPI broadcast method.  Local timers allows the system
@@@ -1302,8 -1196,7 +1302,8 @@@ source kernel/Kconfig.preemp
  
  config HZ
        int
 -      default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P6440 || ARCH_S5P6442 || ARCH_S5PV210
 +      default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P64X0 || \
 +              ARCH_S5P6442 || ARCH_S5PV210 || ARCH_S5PV310
        default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
        default AT91_TIMER_HZ if ARCH_AT91
        default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE
@@@ -1508,20 -1401,6 +1508,20 @@@ config UACCESS_WITH_MEMCP
          However, if the CPU data cache is using a write-allocate mode,
          this option is unlikely to provide any performance gain.
  
 +config SECCOMP
 +      bool
 +      prompt "Enable seccomp to safely compute untrusted bytecode"
 +      ---help---
 +        This kernel feature is useful for number crunching applications
 +        that may need to compute untrusted bytecode during their
 +        execution. By using pipes or other transports made available to
 +        the process as file descriptors supporting the read/write
 +        syscalls, it's possible to isolate those applications in
 +        their own address space using seccomp. Once seccomp is
 +        enabled via prctl(PR_SET_SECCOMP), it cannot be disabled
 +        and the task is only allowed to execute a few safe syscalls
 +        defined by each seccomp mode.
 +
  config CC_STACKPROTECTOR
        bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
        help
@@@ -1660,6 -1539,95 +1660,6 @@@ config AUTO_ZRELADD
          0xf8000000. This assumes the zImage being placed in the first 128MB
          from start of memory.
  
 -config ZRELADDR
 -      hex "Physical address of the decompressed kernel image"
 -      depends on !AUTO_ZRELADDR
 -      default 0x00008000 if ARCH_BCMRING ||\
 -              ARCH_CNS3XXX ||\
 -              ARCH_DOVE ||\
 -              ARCH_EBSA110 ||\
 -              ARCH_FOOTBRIDGE ||\
 -              ARCH_INTEGRATOR ||\
 -              ARCH_IOP13XX ||\
 -              ARCH_IOP33X ||\
 -              ARCH_IXP2000 ||\
 -              ARCH_IXP23XX ||\
 -              ARCH_IXP4XX ||\
 -              ARCH_KIRKWOOD ||\
 -              ARCH_KS8695 ||\
 -              ARCH_LOKI ||\
 -              ARCH_MMP ||\
 -              ARCH_MV78XX0 ||\
 -              ARCH_NOMADIK ||\
 -              ARCH_NUC93X ||\
 -              ARCH_NS9XXX ||\
 -              ARCH_ORION5X ||\
 -              ARCH_SPEAR3XX ||\
 -              ARCH_SPEAR6XX ||\
 -              ARCH_U8500 ||\
 -              ARCH_VERSATILE ||\
 -              ARCH_W90X900
 -      default 0x08008000 if ARCH_MX1 ||\
 -              ARCH_SHARK
 -      default 0x10008000 if ARCH_MSM ||\
 -              ARCH_OMAP1 ||\
 -              ARCH_RPC
 -      default 0x20008000 if ARCH_S5P6440 ||\
 -              ARCH_S5P6442 ||\
 -              ARCH_S5PC100 ||\
 -              ARCH_S5PV210
 -      default 0x30008000 if ARCH_S3C2410 ||\
 -              ARCH_S3C2400 ||\
 -              ARCH_S3C2412 ||\
 -              ARCH_S3C2416 ||\
 -              ARCH_S3C2440 ||\
 -              ARCH_S3C2443
 -      default 0x40008000 if ARCH_STMP378X ||\
 -              ARCH_STMP37XX ||\
 -              ARCH_SH7372 ||\
 -              ARCH_SH7377
 -      default 0x50008000 if ARCH_S3C64XX ||\
 -              ARCH_SH7367
 -      default 0x60008000 if ARCH_VEXPRESS
 -      default 0x80008000 if ARCH_MX25 ||\
 -              ARCH_MX3 ||\
 -              ARCH_NETX ||\
 -              ARCH_OMAP2PLUS ||\
 -              ARCH_PNX4008
 -      default 0x90008000 if ARCH_MX5 ||\
 -              ARCH_MX91231
 -      default 0xa0008000 if ARCH_IOP32X ||\
 -              ARCH_PXA ||\
 -              MACH_MX27
 -      default 0xc0008000 if ARCH_LH7A40X ||\
 -              MACH_MX21
 -      default 0xf0008000 if ARCH_AAEC2000 ||\
 -              ARCH_L7200
 -      default 0xc0028000 if ARCH_CLPS711X
 -      default 0x70008000 if ARCH_AT91 && (ARCH_AT91CAP9 || ARCH_AT91SAM9G45)
 -      default 0x20008000 if ARCH_AT91 && !(ARCH_AT91CAP9 || ARCH_AT91SAM9G45)
 -      default 0xc0008000 if ARCH_DAVINCI && ARCH_DAVINCI_DA8XX
 -      default 0x80008000 if ARCH_DAVINCI && !ARCH_DAVINCI_DA8XX
 -      default 0x00008000 if ARCH_EP93XX && EP93XX_SDCE3_SYNC_PHYS_OFFSET
 -      default 0xc0008000 if ARCH_EP93XX && EP93XX_SDCE0_PHYS_OFFSET
 -      default 0xd0008000 if ARCH_EP93XX && EP93XX_SDCE1_PHYS_OFFSET
 -      default 0xe0008000 if ARCH_EP93XX && EP93XX_SDCE2_PHYS_OFFSET
 -      default 0xf0008000 if ARCH_EP93XX && EP93XX_SDCE3_ASYNC_PHYS_OFFSET
 -      default 0x00008000 if ARCH_GEMINI && GEMINI_MEM_SWAP
 -      default 0x10008000 if ARCH_GEMINI && !GEMINI_MEM_SWAP
 -      default 0x70008000 if ARCH_REALVIEW && REALVIEW_HIGH_PHYS_OFFSET
 -      default 0x00008000 if ARCH_REALVIEW && !REALVIEW_HIGH_PHYS_OFFSET
 -      default 0xc0208000 if ARCH_SA1100 && SA1111
 -      default 0xc0008000 if ARCH_SA1100 && !SA1111
 -      default 0x30108000 if ARCH_S3C2410 && PM_H1940
 -      default 0x28E08000 if ARCH_U300 && MACH_U300_SINGLE_RAM
 -      default 0x48008000 if ARCH_U300 && !MACH_U300_SINGLE_RAM
 -      help
 -        ZRELADDR is the physical address where the decompressed kernel
 -        image will be placed. ZRELADDR has to be specified when the
 -        assumption of AUTO_ZRELADDR is not valid, or when ZBOOT_ROM is
 -        selected.
 -
  endmenu
  
  menu "CPU Power Management"
index 851e8139ef9d1a4c9511022696b10fc17a49ff52,e5be9946280fdd283621ef9a99ea04a0fb5eb33e..abed4d15a7fdfee9b8616c14e8d3da0d1ab6e6c8
@@@ -33,7 -33,6 +33,7 @@@ config ARCH_AT91SAM926
        select HAVE_AT91_USART3
        select HAVE_AT91_USART4
        select HAVE_AT91_USART5
 +      select HAVE_NET_MACB
  
  config ARCH_AT91SAM9261
        bool "AT91SAM9261"
@@@ -52,7 -51,6 +52,7 @@@ config ARCH_AT91SAM926
        select CPU_ARM926T
        select GENERIC_CLOCKEVENTS
        select HAVE_FB_ATMEL
 +      select HAVE_NET_MACB
  
  config ARCH_AT91SAM9RL
        bool "AT91SAM9RL"
@@@ -68,7 -66,6 +68,7 @@@ config ARCH_AT91SAM9G2
        select HAVE_AT91_USART3
        select HAVE_AT91_USART4
        select HAVE_AT91_USART5
 +      select HAVE_NET_MACB
  
  config ARCH_AT91SAM9G45
        bool "AT91SAM9G45"
@@@ -76,7 -73,6 +76,7 @@@
        select GENERIC_CLOCKEVENTS
        select HAVE_AT91_USART3
        select HAVE_FB_ATMEL
 +      select HAVE_NET_MACB
  
  config ARCH_AT91CAP9
        bool "AT91CAP9"
@@@ -109,7 -105,7 +109,7 @@@ config MACH_ONEAR
        bool "Ajeco 1ARM Single Board Computer"
        help
          Select this if you are using Ajeco's 1ARM Single Board Computer.
-         <http://www.ajeco.fi/products.htm>
+         <http://www.ajeco.fi/>
  
  config ARCH_AT91RM9200DK
        bool "Atmel AT91RM9200-DK Development board"
@@@ -141,7 -137,7 +141,7 @@@ config MACH_CARMEV
        bool "Conitec ARM&EVA"
        help
          Select this if you are using Conitec's AT91RM9200-MCU-Module.
-         <http://www.conitec.net/english/linuxboard.htm>
+         <http://www.conitec.net/english/linuxboard.php>
  
  config MACH_ATEB9200
        bool "Embest ATEB9200"
@@@ -153,7 -149,7 +153,7 @@@ config MACH_KB920
        bool "KwikByte KB920x"
        help
          Select this if you are using KwikByte's KB920x board.
-         <http://kwikbyte.com/KB9202_description_new.htm>
+         <http://www.kwikbyte.com/KB9202.html>
  
  config MACH_PICOTUX2XX
        bool "picotux 200"
@@@ -252,12 -248,6 +252,12 @@@ config MACH_CPU926
          Select this if you are using a Eukrea Electromatique's
          CPU9260 Board <http://www.eukrea.com/>
  
 +config MACH_FLEXIBITY
 +      bool "Flexibity Connect board"
 +      help
 +        Select this if you are using Flexibity Connect board
 +        <http://www.flexibity.com>
 +
  endif
  
  # ----------------------------------------------------------
@@@ -348,7 -338,6 +348,7 @@@ config MACH_AT91SAM9G20E
          that embeds only one SD/MMC slot.
  
  config MACH_AT91SAM9G20EK_2MMC
 +      depends on MACH_AT91SAM9G20EK
        bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots"
        select HAVE_NAND_ATMEL_BUSWIDTH_16
        help
@@@ -394,8 -383,8 +394,8 @@@ if ARCH_AT91SAM9G4
  
  comment "AT91SAM9G45 Board Type"
  
 -config MACH_AT91SAM9G45EKES
 -      bool "Atmel AT91SAM9G45-EKES Evaluation Kit"
 +config MACH_AT91SAM9M10G45EK
 +      bool "Atmel AT91SAM9M10G45-EK Evaluation Kits"
        select HAVE_NAND_ATMEL_BUSWIDTH_16
        help
          Select this if you are using Atmel's AT91SAM9G45-EKES Evaluation Kit.
index 1fe6f0187177bba349be1573af8f906553e40989,6536c31eaba3dbad0c1b01a89a5de648306adace..0f8a2e6ee284130f9a4ced41f445e1f51f5bdb2c
@@@ -6,8 -6,6 +6,8 @@@
   * published by the Free Software Foundation.
   */
  
 +struct mmc_card;
 +
  struct omap2_hsmmc_info {
        u8      mmc;            /* controller 1/2/3 */
        u8      wires;          /* 1/4/8 wires */
        char    *name;          /* or NULL for default */
        struct device *dev;     /* returned: pointer to mmc adapter */
        int     ocr_mask;       /* temporary HACK */
-       /* Remux (pad configuation) when powering on/off */
+       /* Remux (pad configuration) when powering on/off */
        void (*remux)(struct device *dev, int slot, int power_on);
 +      /* init some special card */
 +      void (*init_card)(struct mmc_card *card);
  };
  
  #if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
index e3810c86a5e6fd3754f67deaa0b069dac7aec908,67b6ba015cfd69ff4cd83f8c6b305bccec0b4048..6c98b789b8c6a50cfb9b45b29588ab5e2e4d86e9
@@@ -5,7 -5,7 +5,7 @@@
   *      and modifications by SBZ <sbz@spgui.org> and
   *      Weibing <http://weibing.blogbus.com>
   *
-  * For product information, visit http://www.arm9e.com/
+  * For product information, visit http://www.arm.com/
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
@@@ -233,6 -233,8 +233,6 @@@ static void __init at2440evb_init(void
  
  
  MACHINE_START(AT2440EVB, "AT2440EVB")
 -      .phys_io        = S3C2410_PA_UART,
 -      .io_pg_offst    = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
        .boot_params    = S3C2410_SDRAM_PA + 0x100,
        .map_io         = at2440evb_map_io,
        .init_machine   = at2440evb_init,
diff --combined arch/avr32/Kconfig
index 9ac87255a03a335917d994ddaa855f1ba180da79,559aca8743294a446011c4203e9aecb68712540d..f0dc5b8075a7b2da6c23d3d305ca6bc6e028729f
@@@ -90,7 -90,6 +90,7 @@@ config PLATFORM_AT32A
        select ARCH_REQUIRE_GPIOLIB
        select GENERIC_ALLOCATOR
        select HAVE_FB_ATMEL
 +      select HAVE_NET_MACB
  
  #
  # CPU types
@@@ -146,7 -145,7 +146,7 @@@ config BOARD_HAMMERHEA
          will cover even the most exceptional need of memory bandwidth. Together with the onboard
          video decoder the board is ready for video processing.
  
-         For more information see: http://www.miromico.com/hammerhead
+         For more information see: http://www.miromico.ch/index.php/hammerhead.html 
  
  config BOARD_FAVR_32
        bool "Favr-32 LCD-board"
index 07c132dc41251aa43d0a91ac138c89bd52bb0737,b182afb28d249ea11c34fdaee04d2fe6426469de..df82723fb504fa221df05b18f56ca5e1200aee12
@@@ -222,12 -222,8 +222,12 @@@ static struct platform_device ezkit_fla
  #if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
  static struct mtd_partition partition_info[] = {
        {
 -              .name = "linux kernel(nand)",
 +              .name = "bootloader(nand)",
                .offset = 0,
 +              .size = 0x40000,
 +      }, {
 +              .name = "linux kernel(nand)",
 +              .offset = MTDPART_OFS_APPEND,
                .size = 4 * 1024 * 1024,
        },
        {
  };
  
  static struct bf5xx_nand_platform bf5xx_nand_platform = {
 -      .page_size = NFC_PG_SIZE_256,
        .data_width = NFC_NWIDTH_8,
        .partitions = partition_info,
        .nr_partitions = ARRAY_SIZE(partition_info),
@@@ -435,8 -432,8 +435,8 @@@ static struct bfin5xx_spi_chip spi_adc_
  };
  #endif
  
 -#if defined(CONFIG_SND_BLACKFIN_AD183X) \
 -      || defined(CONFIG_SND_BLACKFIN_AD183X_MODULE)
 +#if defined(CONFIG_SND_BF5XX_SOC_AD183X) \
 +      || defined(CONFIG_SND_BF5XX_SOC_AD183X_MODULE)
  static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
        .enable_dma = 0,
        .bits_per_word = 16,
@@@ -551,13 -548,13 +551,13 @@@ static struct spi_board_info bfin_spi_b
        },
  #endif
  
 -#if defined(CONFIG_SND_BLACKFIN_AD183X) \
 -      || defined(CONFIG_SND_BLACKFIN_AD183X_MODULE)
 +#if defined(CONFIG_SND_BF5XX_SOC_AD183X) \
 +      || defined(CONFIG_SND_BF5XX_SOC_AD183X_MODULE)
        {
 -              .modalias = "ad1836",
 +              .modalias = "ad183x",
                .max_speed_hz = 3125000,     /* max spi clock (SCK) speed in HZ */
                .bus_num = 0,
 -              .chip_select = CONFIG_SND_BLACKFIN_SPI_PFBIT,
 +              .chip_select = 4,
                .controller_data = &ad1836_spi_chip_info,
        },
  #endif
@@@ -887,7 -884,7 +887,7 @@@ static struct adp5520_keys_platform_dat
  };
  
        /*
-        *  ADP5520/5501 Multifuction Device Init Data
+        *  ADP5520/5501 Multifunction Device Init Data
         */
  
  static struct adp5520_platform_data adp5520_pdev_data = {
@@@ -933,11 -930,6 +933,11 @@@ static struct i2c_board_info __initdat
                I2C_BOARD_INFO("ssm2602", 0x1b),
        },
  #endif
 +#if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE)
 +      {
 +              I2C_BOARD_INFO("ad5252", 0x2f),
 +      },
 +#endif
  };
  
  #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
index c9e0e85629bfa9355563916ed8bf96e8a107dafd,b342e1d144af29913a51af1acf99ba40c383d5e9..cd2c797c8c9f24b4fa291b52ee87e665f7f9ca32
  #include <asm/reboot.h>
  #include <asm/portmux.h>
  #include <asm/dpmc.h>
 -#ifdef CONFIG_REGULATOR_ADP_SWITCH
 -#include <linux/regulator/adp_switch.h>
 -#endif
 -#ifdef CONFIG_REGULATOR_AD5398
 -#include <linux/regulator/ad5398.h>
 +#ifdef CONFIG_REGULATOR_FIXED_VOLTAGE
 +#include <linux/regulator/fixed.h>
  #endif
 +#include <linux/regulator/machine.h>
  #include <linux/regulator/consumer.h>
  #include <linux/regulator/userspace-consumer.h>
  
@@@ -262,7 -264,7 +262,7 @@@ static struct resource isp1362_hcd_reso
        }, {
                .start = IRQ_PF3,
                .end = IRQ_PF3,
 -              .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
 +              .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE,
        },
  };
  
@@@ -398,7 -400,6 +398,7 @@@ static int bfin_plat_nand_dev_ready(str
  
  static struct platform_nand_data bfin_plat_nand_data = {
        .chip = {
 +              .nr_chips = 1,
                .chip_delay = 30,
  #ifdef CONFIG_MTD_PARTITIONS
                .part_probe_types = part_probes,
  static struct resource bfin_plat_nand_resources = {
        .start = 0x20212000,
        .end   = 0x20212000 + (1 << MAX(BFIN_NAND_PLAT_CLE, BFIN_NAND_PLAT_ALE)),
 -      .flags = IORESOURCE_IO,
 +      .flags = IORESOURCE_MEM,
  };
  
  static struct platform_device bfin_async_nand_device = {
@@@ -543,14 -544,6 +543,14 @@@ static struct bfin5xx_spi_chip ad1938_s
  };
  #endif
  
 +#if defined(CONFIG_SND_BF5XX_SOC_ADAV80X) \
 +      || defined(CONFIG_SND_BF5XX_SOC_ADAV80X_MODULE)
 +static struct bfin5xx_spi_chip adav801_spi_chip_info = {
 +      .enable_dma = 0,
 +      .bits_per_word = 8,
 +};
 +#endif
 +
  #if defined(CONFIG_INPUT_AD714X_SPI) || defined(CONFIG_INPUT_AD714X_SPI_MODULE)
  #include <linux/input/ad714x.h>
  static struct bfin5xx_spi_chip ad7147_spi_chip_info = {
@@@ -699,65 -692,6 +699,65 @@@ static struct bfin5xx_spi_chip ad2s1210
  };
  #endif
  
 +#if defined(CONFIG_AD7314) || defined(CONFIG_AD7314_MODULE)
 +static struct bfin5xx_spi_chip ad7314_spi_chip_info = {
 +      .enable_dma = 0,
 +      .bits_per_word = 16,
 +};
 +#endif
 +
 +#if defined(CONFIG_AD7816) || defined(CONFIG_AD7816_MODULE)
 +static unsigned short ad7816_platform_data[] = {
 +      GPIO_PF4, /* rdwr_pin */
 +      GPIO_PF5, /* convert_pin */
 +      GPIO_PF7, /* busy_pin */
 +      0,
 +};
 +
 +static struct bfin5xx_spi_chip ad7816_spi_chip_info = {
 +      .enable_dma = 0,
 +      .bits_per_word = 8,
 +};
 +#endif
 +
 +#if defined(CONFIG_ADT7310) || defined(CONFIG_ADT7310_MODULE)
 +static unsigned long adt7310_platform_data[3] = {
 +/* INT bound temperature alarm event. line 1 */
 +      IRQ_PG4, IRQF_TRIGGER_LOW,
 +/* CT bound temperature alarm event irq_flags. line 0 */
 +      IRQF_TRIGGER_LOW,
 +};
 +
 +static struct bfin5xx_spi_chip adt7310_spi_chip_info = {
 +      .enable_dma = 0,
 +      .bits_per_word = 8,
 +};
 +#endif
 +
 +#if defined(CONFIG_AD7298) || defined(CONFIG_AD7298_MODULE)
 +static unsigned short ad7298_platform_data[] = {
 +      GPIO_PF7, /* busy_pin */
 +      0,
 +};
 +
 +static struct bfin5xx_spi_chip ad7298_spi_chip_info = {
 +      .enable_dma = 0,
 +      .bits_per_word = 16,
 +};
 +#endif
 +
 +#if defined(CONFIG_ADT7316_SPI) || defined(CONFIG_ADT7316_SPI_MODULE)
 +static unsigned long adt7316_spi_data[2] = {
 +      IRQF_TRIGGER_LOW, /* interrupt flags */
 +      GPIO_PF7, /* ldac_pin, 0 means DAC/LDAC registers control DAC update */
 +};
 +
 +static struct bfin5xx_spi_chip adt7316_spi_chip_info = {
 +      .enable_dma = 0,
 +      .bits_per_word = 8,
 +};
 +#endif
 +
  #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
  #define MMC_SPI_CARD_DETECT_INT IRQ_PF5
  
@@@ -889,12 -823,14 +889,12 @@@ static struct bfin5xx_spi_chip lq035q1_
  static struct bfin5xx_spi_chip enc28j60_spi_chip_info = {
        .enable_dma     = 1,
        .bits_per_word  = 8,
 -      .cs_gpio = GPIO_PF10,
  };
  #endif
  
  #if defined(CONFIG_ADF702X) || defined(CONFIG_ADF702X_MODULE)
  static struct bfin5xx_spi_chip adf7021_spi_chip_info = {
        .bits_per_word = 16,
 -      .cs_gpio = GPIO_PF10,
  };
  
  #include <linux/spi/adf702x.h>
@@@ -1001,13 -937,6 +1001,13 @@@ static struct bfin5xx_spi_chip spi_adxl
  };
  #endif
  
 +#if defined(CONFIG_AD7476) || defined(CONFIG_AD7476_MODULE)
 +static struct bfin5xx_spi_chip spi_ad7476_chip_info = {
 +      .enable_dma = 0,         /* use dma transfer with this chip*/
 +      .bits_per_word = 8,
 +};
 +#endif
 +
  static struct spi_board_info bfin_spi_board_info[] __initdata = {
  #if defined(CONFIG_MTD_M25P80) \
        || defined(CONFIG_MTD_M25P80_MODULE)
                .modalias = "ad183x",
                .max_speed_hz = 3125000,     /* max spi clock (SCK) speed in HZ */
                .bus_num = 0,
 -              .chip_select = 4,/* CONFIG_SND_BLACKFIN_SPI_PFBIT */
 +              .chip_select = 4,
                .platform_data = "ad1836", /* only includes chip name for the moment */
                .controller_data = &ad1836_spi_chip_info,
                .mode = SPI_MODE_3,
        },
  #endif
  
 +#if defined(CONFIG_SND_BF5XX_SOC_ADAV80X) || defined(CONFIG_SND_BF5XX_SOC_ADAV80X_MODULE)
 +      {
 +              .modalias = "adav80x",
 +              .max_speed_hz = 3125000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 1,
 +              .controller_data = &adav801_spi_chip_info,
 +              .mode = SPI_MODE_3,
 +      },
 +#endif
 +
  #if defined(CONFIG_INPUT_AD714X_SPI) || defined(CONFIG_INPUT_AD714X_SPI_MODULE)
        {
                .modalias = "ad714x_captouch",
                .modalias = "ad2s90",
                .bus_num = 0,
                .chip_select = 3,            /* change it for your board */
 +              .mode = SPI_MODE_3,
                .platform_data = NULL,
                .controller_data = &ad2s90_spi_chip_info,
        },
        },
  #endif
  
 +#if defined(CONFIG_AD7314) || defined(CONFIG_AD7314_MODULE)
 +      {
 +              .modalias = "ad7314",
 +              .max_speed_hz = 1000000,
 +              .bus_num = 0,
 +              .chip_select = 4,            /* CS, change it for your board */
 +              .controller_data = &ad7314_spi_chip_info,
 +              .mode = SPI_MODE_1,
 +      },
 +#endif
 +
 +#if defined(CONFIG_AD7816) || defined(CONFIG_AD7816_MODULE)
 +      {
 +              .modalias = "ad7818",
 +              .max_speed_hz = 1000000,
 +              .bus_num = 0,
 +              .chip_select = 4,            /* CS, change it for your board */
 +              .platform_data = ad7816_platform_data,
 +              .controller_data = &ad7816_spi_chip_info,
 +              .mode = SPI_MODE_3,
 +      },
 +#endif
 +
 +#if defined(CONFIG_ADT7310) || defined(CONFIG_ADT7310_MODULE)
 +      {
 +              .modalias = "adt7310",
 +              .max_speed_hz = 1000000,
 +              .irq = IRQ_PG5,         /* CT alarm event. Line 0 */
 +              .bus_num = 0,
 +              .chip_select = 4,       /* CS, change it for your board */
 +              .platform_data = adt7310_platform_data,
 +              .controller_data = &adt7310_spi_chip_info,
 +              .mode = SPI_MODE_3,
 +      },
 +#endif
 +
 +#if defined(CONFIG_AD7298) || defined(CONFIG_AD7298_MODULE)
 +      {
 +              .modalias = "ad7298",
 +              .max_speed_hz = 1000000,
 +              .bus_num = 0,
 +              .chip_select = 4,            /* CS, change it for your board */
 +              .platform_data = ad7298_platform_data,
 +              .controller_data = &ad7298_spi_chip_info,
 +              .mode = SPI_MODE_3,
 +      },
 +#endif
 +
 +#if defined(CONFIG_ADT7316_SPI) || defined(CONFIG_ADT7316_SPI_MODULE)
 +      {
 +              .modalias = "adt7316",
 +              .max_speed_hz = 1000000,
 +              .irq = IRQ_PG5,         /* interrupt line */
 +              .bus_num = 0,
 +              .chip_select = 4,       /* CS, change it for your board */
 +              .platform_data = adt7316_spi_data,
 +              .controller_data = &adt7316_spi_chip_info,
 +              .mode = SPI_MODE_3,
 +      },
 +#endif
 +
  #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
        {
                .modalias = "mmc_spi",
                .max_speed_hz = 20000000,     /* max spi clock (SCK) speed in HZ */
                .irq = IRQ_PF6,
                .bus_num = 0,
 -              .chip_select = 0,       /* GPIO controlled SSEL */
 +              .chip_select = GPIO_PF10 + MAX_CTRL_CS, /* GPIO controlled SSEL */
                .controller_data = &enc28j60_spi_chip_info,
                .mode = SPI_MODE_0,
        },
                .modalias = "adf702x",
                .max_speed_hz = 16000000,     /* max spi clock (SCK) speed in HZ */
                .bus_num = 0,
 -              .chip_select = 0,       /* GPIO controlled SSEL */
 +              .chip_select = GPIO_PF10 + MAX_CTRL_CS, /* GPIO controlled SSEL */
                .controller_data = &adf7021_spi_chip_info,
                .platform_data = &adf7021_platform_data,
                .mode = SPI_MODE_0,
                .mode = SPI_MODE_0,
        },
  #endif
 +#if defined(CONFIG_AD7476) \
 +      || defined(CONFIG_AD7476_MODULE)
 +      {
 +              .modalias = "ad7476", /* Name of spi_driver for this device */
 +              .max_speed_hz = 6250000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0, /* Framework bus number */
 +              .chip_select = 1, /* Framework chip select. */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .controller_data = &spi_ad7476_chip_info,
 +              .mode = SPI_MODE_3,
 +      },
 +#endif
 +#if defined(CONFIG_ADE7753) \
 +      || defined(CONFIG_ADE7753_MODULE)
 +      {
 +              .modalias = "ade7753",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 1, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_1,
 +      },
 +#endif
 +#if defined(CONFIG_ADE7754) \
 +      || defined(CONFIG_ADE7754_MODULE)
 +      {
 +              .modalias = "ade7754",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 1, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_1,
 +      },
 +#endif
 +#if defined(CONFIG_ADE7758) \
 +      || defined(CONFIG_ADE7758_MODULE)
 +      {
 +              .modalias = "ade7758",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 1, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_1,
 +      },
 +#endif
 +#if defined(CONFIG_ADE7759) \
 +      || defined(CONFIG_ADE7759_MODULE)
 +      {
 +              .modalias = "ade7759",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 1, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_1,
 +      },
 +#endif
 +#if defined(CONFIG_ADE7854_SPI) \
 +      || defined(CONFIG_ADE7854_SPI_MODULE)
 +      {
 +              .modalias = "ade7854",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 1, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16060) \
 +      || defined(CONFIG_ADIS16060_MODULE)
 +      {
 +              .modalias = "adis16060_r",
 +              .max_speed_hz = 2900000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = MAX_CTRL_CS + 1, /* CS for read, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_0,
 +      },
 +      {
 +              .modalias = "adis16060_w",
 +              .max_speed_hz = 2900000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 2, /* CS for write, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_1,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16130) \
 +      || defined(CONFIG_ADIS16130_MODULE)
 +      {
 +              .modalias = "adis16130",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 1, /* CS for read, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16201) \
 +      || defined(CONFIG_ADIS16201_MODULE)
 +      {
 +              .modalias = "adis16201",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 5, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +              .irq = IRQ_PF4,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16203) \
 +      || defined(CONFIG_ADIS16203_MODULE)
 +      {
 +              .modalias = "adis16203",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 5, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +              .irq = IRQ_PF4,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16204) \
 +      || defined(CONFIG_ADIS16204_MODULE)
 +      {
 +              .modalias = "adis16204",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 5, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +              .irq = IRQ_PF4,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16209) \
 +      || defined(CONFIG_ADIS16209_MODULE)
 +      {
 +              .modalias = "adis16209",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 5, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +              .irq = IRQ_PF4,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16220) \
 +      || defined(CONFIG_ADIS16220_MODULE)
 +      {
 +              .modalias = "adis16220",
 +              .max_speed_hz = 2000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 5, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +              .irq = IRQ_PF4,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16240) \
 +      || defined(CONFIG_ADIS16240_MODULE)
 +      {
 +              .modalias = "adis16240",
 +              .max_speed_hz = 1500000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 5, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +              .irq = IRQ_PF4,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16260) \
 +      || defined(CONFIG_ADIS16260_MODULE)
 +      {
 +              .modalias = "adis16260",
 +              .max_speed_hz = 1500000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 5, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +              .irq = IRQ_PF4,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16261) \
 +      || defined(CONFIG_ADIS16261_MODULE)
 +      {
 +              .modalias = "adis16261",
 +              .max_speed_hz = 2500000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 1, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16300) \
 +      || defined(CONFIG_ADIS16300_MODULE)
 +      {
 +              .modalias = "adis16300",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 5, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +              .irq = IRQ_PF4,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16350) \
 +      || defined(CONFIG_ADIS16350_MODULE)
 +      {
 +              .modalias = "adis16364",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 5, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +              .irq = IRQ_PF4,
 +      },
 +#endif
 +#if defined(CONFIG_ADIS16400) \
 +      || defined(CONFIG_ADIS16400_MODULE)
 +      {
 +              .modalias = "adis16400",
 +              .max_speed_hz = 1000000,     /* max spi clock (SCK) speed in HZ */
 +              .bus_num = 0,
 +              .chip_select = 1, /* CS, change it for your board */
 +              .platform_data = NULL, /* No spi_driver specific config */
 +              .mode = SPI_MODE_3,
 +      },
 +#endif
  };
  
  #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
  /* SPI controller data */
  static struct bfin5xx_spi_master bfin_spi0_info = {
 -      .num_chipselect = 8,
 +      .num_chipselect = MAX_CTRL_CS + MAX_BLACKFIN_GPIOS,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
        .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
  };
@@@ -2015,7 -1644,7 +2015,7 @@@ static struct adp5520_keys_platform_dat
  };
  
        /*
-        *  ADP5520/5501 Multifuction Device Init Data
+        *  ADP5520/5501 Multifunction Device Init Data
         */
  
  static struct adp5520_platform_data adp5520_pdev_data = {
@@@ -2143,6 -1772,12 +2143,6 @@@ static struct regulator_init_data ad539
        .consumer_supplies     = &ad5398_consumer,
  };
  
 -static struct ad5398_platform_data ad5398_i2c_platform_data = {
 -      .current_bits = 10,
 -      .current_offset = 4,
 -      .regulator_data = &ad5398_regulator_data,
 -};
 -
  #if defined(CONFIG_REGULATOR_VIRTUAL_CONSUMER) || \
        defined(CONFIG_REGULATOR_VIRTUAL_CONSUMER_MODULE)
  static struct platform_device ad5398_virt_consumer_device = {
@@@ -2175,34 -1810,7 +2175,34 @@@ static struct platform_device ad5398_us
  #endif
  #endif
  
 +#if defined(CONFIG_ADT7410) || defined(CONFIG_ADT7410_MODULE)
 +/* INT bound temperature alarm event. line 1 */
 +static unsigned long adt7410_platform_data[2] = {
 +      IRQ_PG4, IRQF_TRIGGER_LOW,
 +};
 +#endif
 +
 +#if defined(CONFIG_ADT7316_I2C) || defined(CONFIG_ADT7316_I2C_MODULE)
 +/* INT bound temperature alarm event. line 1 */
 +static unsigned long adt7316_i2c_data[2] = {
 +      IRQF_TRIGGER_LOW, /* interrupt flags */
 +      GPIO_PF4, /* ldac_pin, 0 means DAC/LDAC registers control DAC update */
 +};
 +#endif
 +
  static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
 +#if defined(CONFIG_SND_BF5XX_SOC_AD193X) || defined(CONFIG_SND_BF5XX_SOC_AD193X_MODULE)
 +      {
 +              I2C_BOARD_INFO("ad1937", 0x04),
 +      },
 +#endif
 +
 +#if defined(CONFIG_SND_BF5XX_SOC_ADAV80X) || defined(CONFIG_SND_BF5XX_SOC_ADAV80X_MODULE)
 +      {
 +              I2C_BOARD_INFO("adav803", 0x10),
 +      },
 +#endif
 +
  #if defined(CONFIG_INPUT_AD714X_I2C) || defined(CONFIG_INPUT_AD714X_I2C_MODULE)
        {
                I2C_BOARD_INFO("ad7142_captouch", 0x2C),
        {
                I2C_BOARD_INFO("ad7414", 0x9),
                .irq = IRQ_PG5,
 -              /*
 -               * platform_data pointer is borrwoed by the driver to
 -               * store custimer defined IRQ ALART level mode.
 -               * only IRQF_TRIGGER_HIGH and IRQF_TRIGGER_LOW are valid.
 -               */
 -              .platform_data = (void *)IRQF_TRIGGER_LOW,
 +              .irq_flags = IRQF_TRIGGER_LOW,
        },
  #endif
  
        {
                I2C_BOARD_INFO("ad7417", 0xb),
                .irq = IRQ_PG5,
 -              /*
 -               * platform_data pointer is borrwoed by the driver to
 -               * store custimer defined IRQ ALART level mode.
 -               * only IRQF_TRIGGER_HIGH and IRQF_TRIGGER_LOW are valid.
 -               */
 -              .platform_data = (void *)IRQF_TRIGGER_LOW,
 +              .irq_flags = IRQF_TRIGGER_LOW,
 +              .platform_data = (void *)GPIO_PF4,
 +      },
 +#endif
 +
 +#if defined(CONFIG_ADE7854_I2C) || defined(CONFIG_ADE7854_I2C_MODULE)
 +      {
 +              I2C_BOARD_INFO("ade7854", 0x38),
 +      },
 +#endif
 +
 +#if defined(CONFIG_ADT75) || defined(CONFIG_ADT75_MODULE)
 +      {
 +              I2C_BOARD_INFO("adt75", 0x9),
 +              .irq = IRQ_PG5,
 +              .irq_flags = IRQF_TRIGGER_LOW,
 +      },
 +#endif
 +
 +#if defined(CONFIG_ADT7408) || defined(CONFIG_ADT7408_MODULE)
 +      {
 +              I2C_BOARD_INFO("adt7408", 0x18),
 +              .irq = IRQ_PG5,
 +              .irq_flags = IRQF_TRIGGER_LOW,
 +      },
 +#endif
 +
 +#if defined(CONFIG_ADT7410) || defined(CONFIG_ADT7410_MODULE)
 +      {
 +              I2C_BOARD_INFO("adt7410", 0x48),
 +              /* CT critical temperature event. line 0 */
 +              .irq = IRQ_PG5,
 +              .irq_flags = IRQF_TRIGGER_LOW,
 +              .platform_data = (void *)&adt7410_platform_data,
 +      },
 +#endif
 +
 +#if defined(CONFIG_AD7291) || defined(CONFIG_AD7291_MODULE)
 +      {
 +              I2C_BOARD_INFO("ad7291", 0x20),
 +              .irq = IRQ_PG5,
 +              .irq_flags = IRQF_TRIGGER_LOW,
 +      },
 +#endif
 +
 +#if defined(CONFIG_ADT7316_I2C) || defined(CONFIG_ADT7316_I2C_MODULE)
 +      {
 +              I2C_BOARD_INFO("adt7316", 0x48),
 +              .irq = IRQ_PG6,
 +              .platform_data = (void *)&adt7316_i2c_data,
        },
  #endif
  
  #endif
  #if defined(CONFIG_FB_BF537_LQ035) || defined(CONFIG_FB_BF537_LQ035_MODULE)
        {
 -              I2C_BOARD_INFO("bf537-lq035-ad5280", 0x2C),
 +              I2C_BOARD_INFO("bf537-lq035-ad5280", 0x2F),
        },
  #endif
  #if defined(CONFIG_BACKLIGHT_ADP8870) || defined(CONFIG_BACKLIGHT_ADP8870_MODULE)
  #if defined(CONFIG_REGULATOR_AD5398) || defined(CONFIG_REGULATOR_AD5398_MODULE)
        {
                I2C_BOARD_INFO("ad5398", 0xC),
 -              .platform_data = (void *)&ad5398_i2c_platform_data,
 +              .platform_data = (void *)&ad5398_regulator_data,
        },
  #endif
  #if defined(CONFIG_BACKLIGHT_ADP8860) || defined(CONFIG_BACKLIGHT_ADP8860_MODULE)
                .platform_data = (void *)&adp8860_pdata,
        },
  #endif
 +#if defined(CONFIG_SND_SOC_ADAU1373) || defined(CONFIG_SND_SOC_ADAU1373_MODULE)
 +      {
 +              I2C_BOARD_INFO("adau1373", 0x1A),
 +      },
 +#endif
 +#if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE)
 +      {
 +              I2C_BOARD_INFO("ad5252", 0x2e),
 +      },
 +#endif
  };
  
  #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
@@@ -2587,38 -2146,50 +2587,38 @@@ static struct platform_device bfin_ac9
  };
  #endif
  
 -#if defined(CONFIG_REGULATOR_ADP_SWITCH) || defined(CONFIG_REGULATOR_ADP_SWITCH_MODULE)
 -#define REGULATOR_ADP122        "adp122"
 -#define REGULATOR_ADP150        "adp150"
 +#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE)
 +#define REGULATOR_ADP122      "adp122"
 +#define REGULATOR_ADP122_UV   2500000
  
  static struct regulator_consumer_supply adp122_consumers = {
                .supply = REGULATOR_ADP122,
  };
  
 -static struct regulator_consumer_supply adp150_consumers = {
 -              .supply = REGULATOR_ADP150,
 -};
 -
 -static struct regulator_init_data adp_switch_regulator_data[] = {
 -      {
 -              .constraints = {
 -                      .name = REGULATOR_ADP122,
 -                      .valid_ops_mask = REGULATOR_CHANGE_STATUS,
 -                      .min_uA = 0,
 -                      .max_uA = 300000,
 -              },
 -              .num_consumer_supplies = 1,     /* only 1 */
 -              .consumer_supplies     = &adp122_consumers,
 -              .driver_data           = (void *)GPIO_PF2, /* gpio port only */
 -      },
 -      {
 -              .constraints = {
 -                      .name = REGULATOR_ADP150,
 -                      .valid_ops_mask = REGULATOR_CHANGE_STATUS,
 -                      .min_uA = 0,
 -                      .max_uA = 150000,
 -              },
 -              .num_consumer_supplies = 1,     /* only 1 */
 -              .consumer_supplies     = &adp150_consumers,
 -              .driver_data           = (void *)GPIO_PF3, /* gpio port only */
 +static struct regulator_init_data adp_switch_regulator_data = {
 +      .constraints = {
 +              .name = REGULATOR_ADP122,
 +              .valid_ops_mask = REGULATOR_CHANGE_STATUS,
 +              .min_uV = REGULATOR_ADP122_UV,
 +              .max_uV = REGULATOR_ADP122_UV,
 +              .min_uA = 0,
 +              .max_uA = 300000,
        },
 +      .num_consumer_supplies = 1,     /* only 1 */
 +      .consumer_supplies     = &adp122_consumers,
  };
  
 -static struct adp_switch_platform_data adp_switch_pdata = {
 -      .regulator_num = ARRAY_SIZE(adp_switch_regulator_data),
 -      .regulator_data = adp_switch_regulator_data,
 +static struct fixed_voltage_config adp_switch_pdata = {
 +      .supply_name = REGULATOR_ADP122,
 +      .microvolts = REGULATOR_ADP122_UV,
 +      .gpio = GPIO_PF2,
 +      .enable_high = 1,
 +      .enabled_at_boot = 0,
 +      .init_data = &adp_switch_regulator_data,
  };
  
  static struct platform_device adp_switch_device = {
 -      .name = "adp_switch",
 +      .name = "reg-fixed-voltage",
        .id = 0,
        .dev = {
                .platform_data = &adp_switch_pdata,
@@@ -2644,26 -2215,27 +2644,26 @@@ static struct platform_device adp122_us
                .platform_data = &adp122_userspace_comsumer_data,
        },
  };
 +#endif
 +#endif
  
 -static struct regulator_bulk_data adp150_bulk_data = {
 -      .supply = REGULATOR_ADP150,
 -};
 +#if defined(CONFIG_IIO_GPIO_TRIGGER) || \
 +      defined(CONFIG_IIO_GPIO_TRIGGER_MODULE)
  
 -static struct regulator_userspace_consumer_data adp150_userspace_comsumer_data = {
 -      .name = REGULATOR_ADP150,
 -      .num_supplies = 1,
 -      .supplies = &adp150_bulk_data,
 +static struct resource iio_gpio_trigger_resources[] = {
 +      [0] = {
 +              .start  = IRQ_PF5,
 +              .end    = IRQ_PF5,
 +              .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE,
 +      },
  };
  
 -static struct platform_device adp150_userspace_consumer_device = {
 -      .name = "reg-userspace-consumer",
 -      .id = 1,
 -      .dev = {
 -              .platform_data = &adp150_userspace_comsumer_data,
 -      },
 +static struct platform_device iio_gpio_trigger = {
 +      .name = "iio_gpio_trigger",
 +      .num_resources = ARRAY_SIZE(iio_gpio_trigger_resources),
 +      .resource = iio_gpio_trigger_resources,
  };
  #endif
 -#endif
 -
  
  static struct platform_device *stamp_devices[] __initdata = {
  
  #endif
  #endif
  
 -#if defined(CONFIG_REGULATOR_ADP_SWITCH) || defined(CONFIG_REGULATOR_ADP_SWITCH_MODULE)
 +#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE) || defined(CONFIG_REGULATOR_FIXED_VOLTAGE_MODULE)
        &adp_switch_device,
  #if defined(CONFIG_REGULATOR_USERSPACE_CONSUMER) || \
        defined(CONFIG_REGULATOR_USERSPACE_CONSUMER_MODULE)
        &adp122_userspace_consumer_device,
 -      &adp150_userspace_consumer_device,
  #endif
  #endif
 +
 +#if defined(CONFIG_IIO_GPIO_TRIGGER) || \
 +      defined(CONFIG_IIO_GPIO_TRIGGER_MODULE)
 +      &iio_gpio_trigger,
 +#endif
  };
  
  static int __init stamp_init(void)
diff --combined arch/m68k/mac/macboing.c
index 05285d08e54767a71a814773c23a506386f9626a,f8810c7bd853fd2d8dca3a08c955690d9bad1d96..ffaa1f6439aed73f84d16bfee7c99413ed874436
@@@ -114,7 -114,8 +114,8 @@@ static void mac_init_asc( void 
                         *   16-bit I/O functionality.  The PowerBook 500 series computers
                         *   support 16-bit stereo output, but only mono input."
                         *
-                        *   http://til.info.apple.com/techinfo.nsf/artnum/n16405
+                        *   Technical Information Library (TIL) article number 16405. 
+                        *   http://support.apple.com/kb/TA32601 
                         *
                         * --David Kilzer
                         */
  void mac_mksound( unsigned int freq, unsigned int length )
  {
        __u32 cfreq = ( freq << 5 ) / 468;
 -      __u32 flags;
 +      unsigned long flags;
        int i;
  
        if ( mac_special_bell == NULL )
@@@ -224,7 -225,7 +225,7 @@@ static void mac_nosound( unsigned long 
   */
  static void mac_quadra_start_bell( unsigned int freq, unsigned int length, unsigned int volume )
  {
 -      __u32 flags;
 +      unsigned long flags;
  
        /* if the bell is already ringing, ring longer */
        if ( mac_bell_duration > 0 )
  static void mac_quadra_ring_bell( unsigned long ignored )
  {
        int     i, count = mac_asc_samplespersec / HZ;
 -      __u32 flags;
 +      unsigned long flags;
  
        /*
         * we neither want a sound buffer overflow nor underflow, so we need to match
diff --combined arch/mips/Kconfig
index 4c9f402295dd3d9b11548ab47d26853761df62f1,4606248764217922e3ea2057fbd2784ce69a7dd4..784cf822963afbee48cfafbaf0d799143aa3972b
@@@ -13,7 -13,6 +13,7 @@@ config MIP
        select HAVE_KPROBES
        select HAVE_KRETPROBES
        select RTC_LIB if !MACH_LOONGSON
 +      select GENERIC_ATOMIC64 if !64BIT
  
  mainmenu "Linux/MIPS Kernel Configuration"
  
@@@ -881,15 -880,11 +881,15 @@@ config NO_IOPOR
  config GENERIC_ISA_DMA
        bool
        select ZONE_DMA if GENERIC_ISA_DMA_SUPPORT_BROKEN=n
 +      select ISA_DMA_API
  
  config GENERIC_ISA_DMA_SUPPORT_BROKEN
        bool
        select GENERIC_ISA_DMA
  
 +config ISA_DMA_API
 +      bool
 +
  config GENERIC_GPIO
        bool
  
@@@ -1651,16 -1646,8 +1651,16 @@@ config MIPS_MT_SM
        select SYS_SUPPORTS_SMP
        select SMP_UP
        help
 -        This is a kernel model which is also known a VSMP or lately
 -        has been marketesed into SMVP.
 +        This is a kernel model which is known a VSMP but lately has been
 +        marketesed into SMVP.
 +        Virtual SMP uses the processor's VPEs  to implement virtual
 +        processors. In currently available configuration of the 34K processor
 +        this allows for a dual processor. Both processors will share the same
 +        primary caches; each will obtain the half of the TLB for it's own
 +        exclusive use. For a layman this model can be described as similar to
 +        what Intel calls Hyperthreading.
 +
 +        For further information see http://www.linux-mips.org/wiki/34K#VSMP
  
  config MIPS_MT_SMTC
        bool "SMTC: Use all TCs on all VPEs for SMP"
        help
          This is a kernel model which is known a SMTC or lately has been
          marketesed into SMVP.
 +        is presenting the available TC's of the core as processors to Linux.
 +        On currently available 34K processors this means a Linux system will
 +        see up to 5 processors. The implementation of the SMTC kernel differs
 +        significantly from VSMP and cannot efficiently coexist in the same
 +        kernel binary so the choice between VSMP and SMTC is a compile time
 +        decision.
 +
 +        For further information see http://www.linux-mips.org/wiki/34K#SMTC
  
  endchoice
  
@@@ -2196,10 -2175,14 +2196,14 @@@ config T
        bool "TURBOchannel support"
        depends on MACH_DECSTATION
        help
-         TurboChannel is a DEC (now Compaq (now HP)) bus for Alpha and MIPS
-         processors.  Documentation on writing device drivers for TurboChannel
-         is available at:
-         <http://www.cs.arizona.edu/computer.help/policy/DIGITAL_unix/AA-PS3HD-TET1_html/TITLE.html>.
+         TURBOchannel is a DEC (now Compaq (now HP)) bus for Alpha and MIPS
+         processors.  TURBOchannel programming specifications are available
+         at:
+         <ftp://ftp.hp.com/pub/alphaserver/archive/triadd/>
+         and:
+         <http://www.computer-refuge.org/classiccmp/ftp.digital.com/pub/DEC/TriAdd/>
+         Linux driver support status is documented at:
+         <http://www.linux-mips.org/wiki/DECstation>
  
  #config ACCESSBUS
  #     bool "Access.Bus support"
index ca35b730d1892e2e425fa74bce388b7a95c3401b,a2bdb2e964c095cb527d083d22e4ffabe18e34df..87ccdb4b5ac911a0448293bd8ee168c521fc6848
@@@ -43,7 -43,7 +43,7 @@@
  #include <asm/sibyte/sb1250_scd.h>
  #include <asm/sibyte/sb1250_int.h>
  #else
- #error invalid SiByte UART configuation
+ #error invalid SiByte UART configuration
  #endif
  
  #if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
@@@ -545,7 -545,6 +545,7 @@@ static const struct file_operations sbp
        .unlocked_ioctl = sbprof_tb_ioctl,
        .compat_ioctl   = sbprof_tb_ioctl,
        .mmap           = NULL,
 +      .llseek         = default_llseek,
  };
  
  static struct class *tb_class;
diff --combined arch/x86/kernel/apm_32.c
index fbbc4dadecc4566968d26dbaed45173c15516e3e,9fed1cc7ba9010a3874ef14eb48fdc5075608151..0e4f24c2a746f11b21ec534db5180c50e0d69cbd
   *   Intel Order Number 241704-001.  Microsoft Part Number 781-110-X01.
   *
   * [This document is available free from Intel by calling 800.628.8686 (fax
-  * 916.356.6100) or 800.548.4725; or via anonymous ftp from
-  * ftp://ftp.intel.com/pub/IAL/software_specs/apmv11.doc.  It is also
+  * 916.356.6100) or 800.548.4725; or from
+  * http://www.microsoft.com/whdc/archive/amp_12.mspx  It is also
   * available from Microsoft by calling 206.882.8080.]
   *
   * APM 1.2 Reference:
@@@ -1926,7 -1926,6 +1926,7 @@@ static const struct file_operations apm
        .unlocked_ioctl = do_ioctl,
        .open           = do_open,
        .release        = do_release,
 +      .llseek         = noop_llseek,
  };
  
  static struct miscdevice apm_device = {
index 0b3d37e83606b441f69a913a4f919e617b020920,b9c5c548224d7d5bb108e1f6eec7252fdc6f1855..1cca374a2bacc8f1f5275847ef4d4cd2787c0545
@@@ -12,7 -12,7 +12,7 @@@
   *    Software Developer's Manual
   *    Order Number 253668 or free download from:
   *
-  *    http://developer.intel.com/design/pentium4/manuals/253668.htm
+  *    http://developer.intel.com/Assets/PDF/manual/253668.pdf 
   *
   *    For more information, go to http://www.urbanmyth.org/microcode
   *
@@@ -232,7 -232,6 +232,7 @@@ static const struct file_operations mic
        .owner                  = THIS_MODULE,
        .write                  = microcode_write,
        .open                   = microcode_open,
 +      .llseek         = no_llseek,
  };
  
  static struct miscdevice microcode_dev = {
diff --combined block/blk-core.c
index 51efd835d4cffa3d1fc1dc80b4aad87b41820498,77411486b11195cc79b0e3ab5433fc28e8a94805..881fe44ec7da3c8356a3fca07f3905cd8befc0f2
@@@ -64,15 -64,13 +64,15 @@@ static void drive_stat_acct(struct requ
                return;
  
        cpu = part_stat_lock();
 -      part = disk_map_sector_rcu(rq->rq_disk, blk_rq_pos(rq));
  
 -      if (!new_io)
 +      if (!new_io) {
 +              part = rq->part;
                part_stat_inc(cpu, part, merges[rw]);
 -      else {
 +      } else {
 +              part = disk_map_sector_rcu(rq->rq_disk, blk_rq_pos(rq));
                part_round_stats(cpu, part);
                part_inc_in_flight(part, rw);
 +              rq->part = part;
        }
  
        part_stat_unlock();
@@@ -130,7 -128,6 +130,7 @@@ void blk_rq_init(struct request_queue *
        rq->ref_count = 1;
        rq->start_time = jiffies;
        set_start_time_ns(rq);
 +      rq->part = NULL;
  }
  EXPORT_SYMBOL(blk_rq_init);
  
@@@ -139,7 -136,7 +139,7 @@@ static void req_bio_endio(struct reques
  {
        struct request_queue *q = rq->q;
  
 -      if (&q->bar_rq != rq) {
 +      if (&q->flush_rq != rq) {
                if (error)
                        clear_bit(BIO_UPTODATE, &bio->bi_flags);
                else if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
                if (bio->bi_size == 0)
                        bio_endio(bio, error);
        } else {
 -
                /*
 -               * Okay, this is the barrier request in progress, just
 -               * record the error;
 +               * Okay, this is the sequenced flush request in
 +               * progress, just record the error;
                 */
 -              if (error && !q->orderr)
 -                      q->orderr = error;
 +              if (error && !q->flush_err)
 +                      q->flush_err = error;
        }
  }
  
@@@ -384,7 -382,6 +384,7 @@@ void blk_sync_queue(struct request_queu
        del_timer_sync(&q->unplug_timer);
        del_timer_sync(&q->timeout);
        cancel_work_sync(&q->unplug_work);
 +      throtl_shutdown_timer_wq(q);
  }
  EXPORT_SYMBOL(blk_sync_queue);
  
@@@ -518,17 -515,11 +518,17 @@@ struct request_queue *blk_alloc_queue_n
                return NULL;
        }
  
 +      if (blk_throtl_init(q)) {
 +              kmem_cache_free(blk_requestq_cachep, q);
 +              return NULL;
 +      }
 +
        setup_timer(&q->backing_dev_info.laptop_mode_wb_timer,
                    laptop_mode_timer_fn, (unsigned long) q);
        init_timer(&q->unplug_timer);
        setup_timer(&q->timeout, blk_rq_timed_out_timer, (unsigned long) q);
        INIT_LIST_HEAD(&q->timeout_list);
 +      INIT_LIST_HEAD(&q->pending_flushes);
        INIT_WORK(&q->unplug_work, blk_unplug_work);
  
        kobject_init(&q->kobj, &blk_queue_ktype);
@@@ -805,16 -796,11 +805,16 @@@ static struct request *get_request(stru
        rl->starved[is_sync] = 0;
  
        priv = !test_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
 -      if (priv)
 +      if (priv) {
                rl->elvpriv++;
  
 -      if (blk_queue_io_stat(q))
 -              rw_flags |= REQ_IO_STAT;
 +              /*
 +               * Don't do stats for non-priv requests
 +               */
 +              if (blk_queue_io_stat(q))
 +                      rw_flags |= REQ_IO_STAT;
 +      }
 +
        spin_unlock_irq(q->queue_lock);
  
        rq = blk_alloc_request(q, rw_flags, priv, gfp_mask);
@@@ -1051,6 -1037,22 +1051,6 @@@ void blk_insert_request(struct request_
  }
  EXPORT_SYMBOL(blk_insert_request);
  
 -/*
 - * add-request adds a request to the linked list.
 - * queue lock is held and interrupts disabled, as we muck with the
 - * request queue list.
 - */
 -static inline void add_request(struct request_queue *q, struct request *req)
 -{
 -      drive_stat_acct(req, 1);
 -
 -      /*
 -       * elevator indicated where it wants this request to be
 -       * inserted at elevator_merge time
 -       */
 -      __elv_add_request(q, req, ELEVATOR_INSERT_SORT, 0);
 -}
 -
  static void part_round_stats_single(int cpu, struct hd_struct *part,
                                    unsigned long now)
  {
@@@ -1196,19 -1198,16 +1196,19 @@@ static int __make_request(struct reques
        int el_ret;
        unsigned int bytes = bio->bi_size;
        const unsigned short prio = bio_prio(bio);
 -      const bool sync = (bio->bi_rw & REQ_SYNC);
 -      const bool unplug = (bio->bi_rw & REQ_UNPLUG);
 -      const unsigned int ff = bio->bi_rw & REQ_FAILFAST_MASK;
 +      const bool sync = !!(bio->bi_rw & REQ_SYNC);
 +      const bool unplug = !!(bio->bi_rw & REQ_UNPLUG);
 +      const unsigned long ff = bio->bi_rw & REQ_FAILFAST_MASK;
 +      int where = ELEVATOR_INSERT_SORT;
        int rw_flags;
  
 -      if ((bio->bi_rw & REQ_HARDBARRIER) &&
 -          (q->next_ordered == QUEUE_ORDERED_NONE)) {
 +      /* REQ_HARDBARRIER is no more */
 +      if (WARN_ONCE(bio->bi_rw & REQ_HARDBARRIER,
 +              "block: HARDBARRIER is deprecated, use FLUSH/FUA instead\n")) {
                bio_endio(bio, -EOPNOTSUPP);
                return 0;
        }
 +
        /*
         * low level driver can indicate that it wants pages above a
         * certain limit bounced to low memory (ie for highmem, or even
  
        spin_lock_irq(q->queue_lock);
  
 -      if (unlikely((bio->bi_rw & REQ_HARDBARRIER)) || elv_queue_empty(q))
 +      if (bio->bi_rw & (REQ_FLUSH | REQ_FUA)) {
 +              where = ELEVATOR_INSERT_FRONT;
 +              goto get_rq;
 +      }
 +
 +      if (elv_queue_empty(q))
                goto get_rq;
  
        el_ret = elv_merge(q, &req, bio);
@@@ -1320,10 -1314,7 +1320,10 @@@ get_rq
                req->cpu = blk_cpu_to_group(smp_processor_id());
        if (queue_should_plug(q) && elv_queue_empty(q))
                blk_plug_device(q);
 -      add_request(q, req);
 +
 +      /* insert the request into the elevator */
 +      drive_stat_acct(req, 1);
 +      __elv_add_request(q, req, where, 0);
  out:
        if (unplug || !queue_should_plug(q))
                __generic_unplug_device(q);
@@@ -1523,36 -1514,11 +1523,36 @@@ static inline void __generic_make_reque
                if (bio_check_eod(bio, nr_sectors))
                        goto end_io;
  
 -              if ((bio->bi_rw & REQ_DISCARD) && !blk_queue_discard(q)) {
 +              /*
 +               * Filter flush bio's early so that make_request based
 +               * drivers without flush support don't have to worry
 +               * about them.
 +               */
 +              if ((bio->bi_rw & (REQ_FLUSH | REQ_FUA)) && !q->flush_flags) {
 +                      bio->bi_rw &= ~(REQ_FLUSH | REQ_FUA);
 +                      if (!nr_sectors) {
 +                              err = 0;
 +                              goto end_io;
 +                      }
 +              }
 +
 +              if ((bio->bi_rw & REQ_DISCARD) &&
 +                  (!blk_queue_discard(q) ||
 +                   ((bio->bi_rw & REQ_SECURE) &&
 +                    !blk_queue_secdiscard(q)))) {
                        err = -EOPNOTSUPP;
                        goto end_io;
                }
  
 +              blk_throtl_bio(q, &bio);
 +
 +              /*
 +               * If bio = NULL, bio has been throttled and will be submitted
 +               * later.
 +               */
 +              if (!bio)
 +                      break;
 +
                trace_block_bio_queue(q, bio);
  
                ret = q->make_request_fn(q, bio);
@@@ -1643,12 -1609,11 +1643,12 @@@ void submit_bio(int rw, struct bio *bio
  
                if (unlikely(block_dump)) {
                        char b[BDEVNAME_SIZE];
 -                      printk(KERN_DEBUG "%s(%d): %s block %Lu on %s\n",
 +                      printk(KERN_DEBUG "%s(%d): %s block %Lu on %s (%u sectors)\n",
                        current->comm, task_pid_nr(current),
                                (rw & WRITE) ? "WRITE" : "READ",
                                (unsigned long long)bio->bi_sector,
 -                              bdevname(bio->bi_bdev, b));
 +                              bdevname(bio->bi_bdev, b),
 +                              count);
                }
        }
  
@@@ -1669,7 -1634,7 +1669,7 @@@ EXPORT_SYMBOL(submit_bio)
   *    the insertion using this generic function.
   *
   *    This function should also be useful for request stacking drivers
-  *    in some cases below, so export this fuction.
+  *    in some cases below, so export this function.
   *    Request stacking drivers like request-based dm may change the queue
   *    limits while requests are in the queue (e.g. dm's table swapping).
   *    Such request stacking drivers should check those requests agaist
@@@ -1791,7 -1756,7 +1791,7 @@@ static void blk_account_io_completion(s
                int cpu;
  
                cpu = part_stat_lock();
 -              part = disk_map_sector_rcu(req->rq_disk, blk_rq_pos(req));
 +              part = req->part;
                part_stat_add(cpu, part, sectors[rw], bytes >> 9);
                part_stat_unlock();
        }
  static void blk_account_io_done(struct request *req)
  {
        /*
 -       * Account IO completion.  bar_rq isn't accounted as a normal
 -       * IO on queueing nor completion.  Accounting the containing
 -       * request is enough.
 +       * Account IO completion.  flush_rq isn't accounted as a
 +       * normal IO on queueing nor completion.  Accounting the
 +       * containing request is enough.
         */
 -      if (blk_do_io_stat(req) && req != &req->q->bar_rq) {
 +      if (blk_do_io_stat(req) && req != &req->q->flush_rq) {
                unsigned long duration = jiffies - req->start_time;
                const int rw = rq_data_dir(req);
                struct hd_struct *part;
                int cpu;
  
                cpu = part_stat_lock();
 -              part = disk_map_sector_rcu(req->rq_disk, blk_rq_pos(req));
 +              part = req->part;
  
                part_stat_inc(cpu, part, ios[rw]);
                part_stat_add(cpu, part, ticks[rw], duration);
@@@ -2529,7 -2494,9 +2529,7 @@@ EXPORT_SYMBOL_GPL(blk_rq_unprep_clone)
  static void __blk_rq_prep_clone(struct request *dst, struct request *src)
  {
        dst->cpu = src->cpu;
 -      dst->cmd_flags = (rq_data_dir(src) | REQ_NOMERGE);
 -      if (src->cmd_flags & REQ_DISCARD)
 -              dst->cmd_flags |= REQ_DISCARD;
 +      dst->cmd_flags = (src->cmd_flags & REQ_CLONE_MASK) | REQ_NOMERGE;
        dst->cmd_type = src->cmd_type;
        dst->__sector = blk_rq_pos(src);
        dst->__data_len = blk_rq_bytes(src);
@@@ -2609,13 -2576,6 +2609,13 @@@ int kblockd_schedule_work(struct reques
  }
  EXPORT_SYMBOL(kblockd_schedule_work);
  
 +int kblockd_schedule_delayed_work(struct request_queue *q,
 +                      struct delayed_work *dwork, unsigned long delay)
 +{
 +      return queue_delayed_work(kblockd_workqueue, dwork, delay);
 +}
 +EXPORT_SYMBOL(kblockd_schedule_delayed_work);
 +
  int __init blk_dev_init(void)
  {
        BUILD_BUG_ON(__REQ_NR_BITS > 8 *
diff --combined drivers/ata/pata_bf54x.c
index ec2c777fcdb008efec7399e29054ef967cc3bed4,be7b1b21e77712ee0139502b535c3459e27d820c..7aed5c792597c07918545610515af2daf6fabd1e
@@@ -826,7 -826,7 +826,7 @@@ static void bfin_dev_select(struct ata_
   *    @ctl: value to write
   */
  
 -static u8 bfin_set_devctl(struct ata_port *ap, u8 ctl)
 +static void bfin_set_devctl(struct ata_port *ap, u8 ctl)
  {
        void __iomem *base = (void __iomem *)ap->ioaddr.ctl_addr;
        write_atapi_register(base, ATA_REG_CTRL, ctl);
@@@ -1046,7 -1046,7 +1046,7 @@@ static void bfin_bus_post_reset(struct 
                        dev1 = 0;
                        break;
                }
 -              msleep(50);     /* give drive a breather */
 +              ata_msleep(ap, 50);     /* give drive a breather */
        }
        if (dev1)
                ata_sff_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT);
@@@ -1087,7 -1087,7 +1087,7 @@@ static unsigned int bfin_bus_softreset(
         *
         * Old drivers/ide uses the 2mS rule and then waits for ready
         */
 -      msleep(150);
 +      ata_msleep(ap, 150);
  
        /* Before we perform post reset processing we want to see if
         * the bus shows 0xFF because the odd clown forgets the D7
@@@ -1588,7 -1588,7 +1588,7 @@@ static int __devinit bfin_atapi_probe(s
        host->ports[0]->ioaddr.ctl_addr = (void *)res->start;
  
        if (peripheral_request_list(atapi_io_port, "atapi-io-port")) {
-               dev_err(&pdev->dev, "Requesting Peripherals faild\n");
+               dev_err(&pdev->dev, "Requesting Peripherals failed\n");
                return -EFAULT;
        }
  
diff --combined drivers/base/core.c
index 2cb49a93b1e6461f8174744609dee4fb1c254ca9,aed85f1c446eba6e92c958bfaafe87e4ae2579f9..6ed645411c40d4bd7c59d33a9055da24e7ff1159
  #include "base.h"
  #include "power/power.h"
  
 +#ifdef CONFIG_SYSFS_DEPRECATED
 +#ifdef CONFIG_SYSFS_DEPRECATED_V2
 +long sysfs_deprecated = 1;
 +#else
 +long sysfs_deprecated = 0;
 +#endif
 +static __init int sysfs_deprecated_setup(char *arg)
 +{
 +      return strict_strtol(arg, 10, &sysfs_deprecated);
 +}
 +early_param("sysfs.deprecated", sysfs_deprecated_setup);
 +#endif
 +
  int (*platform_notify)(struct device *dev) = NULL;
  int (*platform_notify_remove)(struct device *dev) = NULL;
  static struct kobject *dev_kobj;
@@@ -216,6 -203,37 +216,6 @@@ static int dev_uevent(struct kset *kset
        if (dev->driver)
                add_uevent_var(env, "DRIVER=%s", dev->driver->name);
  
 -#ifdef CONFIG_SYSFS_DEPRECATED
 -      if (dev->class) {
 -              struct device *parent = dev->parent;
 -
 -              /* find first bus device in parent chain */
 -              while (parent && !parent->bus)
 -                      parent = parent->parent;
 -              if (parent && parent->bus) {
 -                      const char *path;
 -
 -                      path = kobject_get_path(&parent->kobj, GFP_KERNEL);
 -                      if (path) {
 -                              add_uevent_var(env, "PHYSDEVPATH=%s", path);
 -                              kfree(path);
 -                      }
 -
 -                      add_uevent_var(env, "PHYSDEVBUS=%s", parent->bus->name);
 -
 -                      if (parent->driver)
 -                              add_uevent_var(env, "PHYSDEVDRIVER=%s",
 -                                             parent->driver->name);
 -              }
 -      } else if (dev->bus) {
 -              add_uevent_var(env, "PHYSDEVBUS=%s", dev->bus->name);
 -
 -              if (dev->driver)
 -                      add_uevent_var(env, "PHYSDEVDRIVER=%s",
 -                                     dev->driver->name);
 -      }
 -#endif
 -
        /* have the bus specific function add its stuff */
        if (dev->bus && dev->bus->uevent) {
                retval = dev->bus->uevent(dev, env);
                                 __func__, retval);
        }
  
-       /* have the device type specific fuction add its stuff */
+       /* have the device type specific function add its stuff */
        if (dev->type && dev->type->uevent) {
                retval = dev->type->uevent(dev, env);
                if (retval)
@@@ -560,6 -578,24 +560,6 @@@ void device_initialize(struct device *d
        set_dev_node(dev, -1);
  }
  
 -#ifdef CONFIG_SYSFS_DEPRECATED
 -static struct kobject *get_device_parent(struct device *dev,
 -                                       struct device *parent)
 -{
 -      /* class devices without a parent live in /sys/class/<classname>/ */
 -      if (dev->class && (!parent || parent->class != dev->class))
 -              return &dev->class->p->class_subsys.kobj;
 -      /* all other devices keep their parent */
 -      else if (parent)
 -              return &parent->kobj;
 -
 -      return NULL;
 -}
 -
 -static inline void cleanup_device_parent(struct device *dev) {}
 -static inline void cleanup_glue_dir(struct device *dev,
 -                                  struct kobject *glue_dir) {}
 -#else
  static struct kobject *virtual_device_parent(struct device *dev)
  {
        static struct kobject *virtual_dir = NULL;
@@@ -630,15 -666,6 +630,15 @@@ static struct kobject *get_device_paren
                struct kobject *parent_kobj;
                struct kobject *k;
  
 +#ifdef CONFIG_BLOCK
 +              /* block disks show up in /sys/block */
 +              if (sysfs_deprecated && dev->class == &block_class) {
 +                      if (parent && parent->class == &block_class)
 +                              return &parent->kobj;
 +                      return &block_class.p->class_subsys.kobj;
 +              }
 +#endif
 +
                /*
                 * If we have no parent, we live in "virtual".
                 * Class-devices with a non class-device as parent, live
@@@ -692,6 -719,7 +692,6 @@@ static void cleanup_device_parent(struc
  {
        cleanup_glue_dir(dev, dev->kobj.parent);
  }
 -#endif
  
  static void setup_parent(struct device *dev, struct device *parent)
  {
@@@ -714,29 -742,70 +714,29 @@@ static int device_add_class_symlinks(st
        if (error)
                goto out;
  
 -#ifdef CONFIG_SYSFS_DEPRECATED
 -      /* stacked class devices need a symlink in the class directory */
 -      if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
 -          device_is_not_partition(dev)) {
 -              error = sysfs_create_link(&dev->class->p->class_subsys.kobj,
 -                                        &dev->kobj, dev_name(dev));
 -              if (error)
 -                      goto out_subsys;
 -      }
 -
        if (dev->parent && device_is_not_partition(dev)) {
 -              struct device *parent = dev->parent;
 -              char *class_name;
 -
 -              /*
 -               * stacked class devices have the 'device' link
 -               * pointing to the bus device instead of the parent
 -               */
 -              while (parent->class && !parent->bus && parent->parent)
 -                      parent = parent->parent;
 -
 -              error = sysfs_create_link(&dev->kobj,
 -                                        &parent->kobj,
 +              error = sysfs_create_link(&dev->kobj, &dev->parent->kobj,
                                          "device");
                if (error)
 -                      goto out_busid;
 -
 -              class_name = make_class_name(dev->class->name,
 -                                              &dev->kobj);
 -              if (class_name)
 -                      error = sysfs_create_link(&dev->parent->kobj,
 -                                              &dev->kobj, class_name);
 -              kfree(class_name);
 -              if (error)
 -                      goto out_device;
 +                      goto out_subsys;
        }
 -      return 0;
  
 -out_device:
 -      if (dev->parent && device_is_not_partition(dev))
 -              sysfs_remove_link(&dev->kobj, "device");
 -out_busid:
 -      if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
 -          device_is_not_partition(dev))
 -              sysfs_delete_link(&dev->class->p->class_subsys.kobj, &dev->kobj,
 -                                dev_name(dev));
 -#else
 +#ifdef CONFIG_BLOCK
 +      /* /sys/block has directories and does not need symlinks */
 +      if (sysfs_deprecated && dev->class == &block_class)
 +              return 0;
 +#endif
 +
        /* link in the class directory pointing to the device */
        error = sysfs_create_link(&dev->class->p->class_subsys.kobj,
                                  &dev->kobj, dev_name(dev));
        if (error)
 -              goto out_subsys;
 +              goto out_device;
  
 -      if (dev->parent && device_is_not_partition(dev)) {
 -              error = sysfs_create_link(&dev->kobj, &dev->parent->kobj,
 -                                        "device");
 -              if (error)
 -                      goto out_busid;
 -      }
        return 0;
  
 -out_busid:
 -      sysfs_delete_link(&dev->class->p->class_subsys.kobj, &dev->kobj, dev_name(dev));
 -#endif
 +out_device:
 +      sysfs_remove_link(&dev->kobj, "device");
  
  out_subsys:
        sysfs_remove_link(&dev->kobj, "subsystem");
@@@ -749,14 -818,30 +749,14 @@@ static void device_remove_class_symlink
        if (!dev->class)
                return;
  
 -#ifdef CONFIG_SYSFS_DEPRECATED
 -      if (dev->parent && device_is_not_partition(dev)) {
 -              char *class_name;
 -
 -              class_name = make_class_name(dev->class->name, &dev->kobj);
 -              if (class_name) {
 -                      sysfs_remove_link(&dev->parent->kobj, class_name);
 -                      kfree(class_name);
 -              }
 -              sysfs_remove_link(&dev->kobj, "device");
 -      }
 -
 -      if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
 -          device_is_not_partition(dev))
 -              sysfs_delete_link(&dev->class->p->class_subsys.kobj, &dev->kobj,
 -                                dev_name(dev));
 -#else
        if (dev->parent && device_is_not_partition(dev))
                sysfs_remove_link(&dev->kobj, "device");
 -
 -      sysfs_delete_link(&dev->class->p->class_subsys.kobj, &dev->kobj, dev_name(dev));
 -#endif
 -
        sysfs_remove_link(&dev->kobj, "subsystem");
 +#ifdef CONFIG_BLOCK
 +      if (sysfs_deprecated && dev->class == &block_class)
 +              return;
 +#endif
 +      sysfs_delete_link(&dev->class->p->class_subsys.kobj, &dev->kobj, dev_name(dev));
  }
  
  /**
@@@ -1528,23 -1613,41 +1528,23 @@@ int device_rename(struct device *dev, c
        pr_debug("device: '%s': %s: renaming to '%s'\n", dev_name(dev),
                 __func__, new_name);
  
 -#ifdef CONFIG_SYSFS_DEPRECATED
 -      if ((dev->class) && (dev->parent))
 -              old_class_name = make_class_name(dev->class->name, &dev->kobj);
 -#endif
 -
        old_device_name = kstrdup(dev_name(dev), GFP_KERNEL);
        if (!old_device_name) {
                error = -ENOMEM;
                goto out;
        }
  
 -#ifndef CONFIG_SYSFS_DEPRECATED
        if (dev->class) {
                error = sysfs_rename_link(&dev->class->p->class_subsys.kobj,
                        &dev->kobj, old_device_name, new_name);
                if (error)
                        goto out;
        }
 -#endif
 +
        error = kobject_rename(&dev->kobj, new_name);
        if (error)
                goto out;
  
 -#ifdef CONFIG_SYSFS_DEPRECATED
 -      if (old_class_name) {
 -              new_class_name = make_class_name(dev->class->name, &dev->kobj);
 -              if (new_class_name) {
 -                      error = sysfs_rename_link(&dev->parent->kobj,
 -                                                &dev->kobj,
 -                                                old_class_name,
 -                                                new_class_name);
 -              }
 -      }
 -#endif
 -
  out:
        put_device(dev);
  
@@@ -1561,13 -1664,40 +1561,13 @@@ static int device_move_class_links(stru
                                   struct device *new_parent)
  {
        int error = 0;
 -#ifdef CONFIG_SYSFS_DEPRECATED
 -      char *class_name;
  
 -      class_name = make_class_name(dev->class->name, &dev->kobj);
 -      if (!class_name) {
 -              error = -ENOMEM;
 -              goto out;
 -      }
 -      if (old_parent) {
 -              sysfs_remove_link(&dev->kobj, "device");
 -              sysfs_remove_link(&old_parent->kobj, class_name);
 -      }
 -      if (new_parent) {
 -              error = sysfs_create_link(&dev->kobj, &new_parent->kobj,
 -                                        "device");
 -              if (error)
 -                      goto out;
 -              error = sysfs_create_link(&new_parent->kobj, &dev->kobj,
 -                                        class_name);
 -              if (error)
 -                      sysfs_remove_link(&dev->kobj, "device");
 -      } else
 -              error = 0;
 -out:
 -      kfree(class_name);
 -      return error;
 -#else
        if (old_parent)
                sysfs_remove_link(&dev->kobj, "device");
        if (new_parent)
                error = sysfs_create_link(&dev->kobj, &new_parent->kobj,
                                          "device");
        return error;
 -#endif
  }
  
  /**
diff --combined drivers/char/agp/Kconfig
index 5ddf67e76f8bbccf3242da3bc2e2373d2255648c,c8ad61958e24a05484f7d8d71fbc661ce5bc8653..fcd867d923ba57447895b21853224dfd08fe115b
@@@ -34,7 -34,7 +34,7 @@@ config AGP_AL
          X on the following ALi chipsets.  The supported chipsets
          include M1541, M1621, M1631, M1632, M1641,M1647,and M1651.
          For the ALi-chipset question, ALi suggests you refer to
-         <http://www.ali.com.tw/eng/support/index.shtml>.
+         <http://www.ali.com.tw/>.
  
          The M1541 chipset can do AGP 1x and 2x, but note that there is an
          acknowledged incompatibility with Matrox G200 cards. Due to
@@@ -57,7 -57,7 +57,7 @@@ config AGP_AM
  
  config AGP_AMD64
        tristate "AMD Opteron/Athlon64 on-CPU GART support"
 -      depends on AGP && X86 && K8_NB
 +      depends on AGP && X86 && AMD_NB
        help
          This option gives you AGP support for the GLX component of
          X using the on-CPU northbridge of the AMD Athlon64/Opteron CPUs.
index 3022801669b148b35bc9174c19a7bbf559ec7cd6,0848ca90255dd26d1a2802db2b9dd5ba6308a9bc..45b987c9889e704e4d31aba542a63200edac5f16
@@@ -7,13 -7,13 +7,13 @@@
   *   Intel Corporation, Microsoft Corporation. Advanced Power Management
   *   (APM) BIOS Interface Specification, Revision 1.2, February 1996.
   *
-  * [This document is available from Microsoft at:
-  *    http://www.microsoft.com/hwdev/busbios/amp_12.htm]
+  * This document is available from Microsoft at:
+  *    http://www.microsoft.com/whdc/archive/amp_12.mspx
   */
  #include <linux/module.h>
  #include <linux/poll.h>
  #include <linux/slab.h>
 -#include <linux/smp_lock.h>
 +#include <linux/mutex.h>
  #include <linux/proc_fs.h>
  #include <linux/seq_file.h>
  #include <linux/miscdevice.h>
@@@ -126,7 -126,6 +126,7 @@@ struct apm_user 
  /*
   * Local variables
   */
 +static DEFINE_MUTEX(apm_mutex);
  static atomic_t suspend_acks_pending = ATOMIC_INIT(0);
  static atomic_t userspace_notification_inhibit = ATOMIC_INIT(0);
  static int apm_disabled;
@@@ -275,7 -274,7 +275,7 @@@ apm_ioctl(struct file *filp, u_int cmd
        if (!as->suser || !as->writer)
                return -EPERM;
  
 -      lock_kernel();
 +      mutex_lock(&apm_mutex);
        switch (cmd) {
        case APM_IOC_SUSPEND:
                mutex_lock(&state_lock);
                mutex_unlock(&state_lock);
                break;
        }
 -      unlock_kernel();
 +      mutex_unlock(&apm_mutex);
  
        return err;
  }
@@@ -371,7 -370,7 +371,7 @@@ static int apm_open(struct inode * inod
  {
        struct apm_user *as;
  
 -      lock_kernel();
 +      mutex_lock(&apm_mutex);
        as = kzalloc(sizeof(*as), GFP_KERNEL);
        if (as) {
                /*
  
                filp->private_data = as;
        }
 -      unlock_kernel();
 +      mutex_unlock(&apm_mutex);
  
        return as ? 0 : -ENOMEM;
  }
@@@ -403,7 -402,6 +403,7 @@@ static const struct file_operations apm
        .unlocked_ioctl = apm_ioctl,
        .open           = apm_open,
        .release        = apm_release,
 +      .llseek         = noop_llseek,
  };
  
  static struct miscdevice apm_device = {
index 7bd7c45b53efc849225f7f0a604c41f2f0a4fded,2a84379b9104eab419fb28813fc16da790320513..e537610d2f09475bf321b8652815fb9eaa46c762
@@@ -305,9 -305,6 +305,9 @@@ static int num_force_kipmid
  #ifdef CONFIG_PCI
  static int pci_registered;
  #endif
 +#ifdef CONFIG_ACPI
 +static int pnp_registered;
 +#endif
  #ifdef CONFIG_PPC_OF
  static int of_registered;
  #endif
@@@ -1807,12 -1804,9 +1807,12 @@@ static int hotmod_handler(const char *v
                                info->irq_setup = std_irq_setup;
                        info->slave_addr = ipmb;
  
 -                      if (!add_smi(info))
 +                      if (!add_smi(info)) {
                                if (try_smi_init(info))
                                        cleanup_one_si(info);
 +                      } else {
 +                              kfree(info);
 +                      }
                } else {
                        /* remove */
                        struct smi_info *e, *tmp_e;
@@@ -1896,12 -1890,9 +1896,12 @@@ static __devinit void hardcode_find_bmc
                        info->irq_setup = std_irq_setup;
                info->slave_addr = slave_addrs[i];
  
 -              if (!add_smi(info))
 +              if (!add_smi(info)) {
                        if (try_smi_init(info))
                                cleanup_one_si(info);
 +              } else {
 +                      kfree(info);
 +              }
        }
  }
  
@@@ -1974,8 -1965,7 +1974,7 @@@ static int acpi_gpe_irq_setup(struct sm
  
  /*
   * Defined at
-  * http://h21007.www2.hp.com/portal/download/files
-  * /unprot/hpspmi.pdf
+  * http://h21007.www2.hp.com/portal/download/files/unprot/hpspmi.pdf
   */
  struct SPMITable {
        s8      Signature[4];
  static __devinit int try_init_spmi(struct SPMITable *spmi)
  {
        struct smi_info  *info;
 -      u8               addr_space;
  
        if (spmi->IPMIlegacy != 1) {
                printk(KERN_INFO PFX "Bad SPMI legacy %d\n", spmi->IPMIlegacy);
                return -ENODEV;
        }
  
 -      if (spmi->addr.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY)
 -              addr_space = IPMI_MEM_ADDR_SPACE;
 -      else
 -              addr_space = IPMI_IO_ADDR_SPACE;
 -
        info = kzalloc(sizeof(*info), GFP_KERNEL);
        if (!info) {
                printk(KERN_ERR PFX "Could not allocate SI data (3)\n");
        }
        info->io.addr_data = spmi->addr.address;
  
 -      add_smi(info);
 +      pr_info("ipmi_si: SPMI: %s %#lx regsize %d spacing %d irq %d\n",
 +               (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem",
 +               info->io.addr_data, info->io.regsize, info->io.regspacing,
 +               info->irq);
 +
 +      if (add_smi(info))
 +              kfree(info);
  
        return 0;
  }
@@@ -2129,7 -2119,7 +2128,7 @@@ static int __devinit ipmi_pnp_probe(str
  {
        struct acpi_device *acpi_dev;
        struct smi_info *info;
 -      struct resource *res;
 +      struct resource *res, *res_second;
        acpi_handle handle;
        acpi_status status;
        unsigned long long tmp;
        info->io.addr_data = res->start;
  
        info->io.regspacing = DEFAULT_REGSPACING;
 -      res = pnp_get_resource(dev,
 +      res_second = pnp_get_resource(dev,
                               (info->io.addr_type == IPMI_IO_ADDR_SPACE) ?
                                        IORESOURCE_IO : IORESOURCE_MEM,
                               1);
 -      if (res) {
 -              if (res->start > info->io.addr_data)
 -                      info->io.regspacing = res->start - info->io.addr_data;
 +      if (res_second) {
 +              if (res_second->start > info->io.addr_data)
 +                      info->io.regspacing = res_second->start - info->io.addr_data;
        }
        info->io.regsize = DEFAULT_REGSPACING;
        info->io.regshift = 0;
                 res, info->io.regsize, info->io.regspacing,
                 info->irq);
  
 -      return add_smi(info);
 +      if (add_smi(info))
 +              goto err_free;
 +
 +      return 0;
  
  err_free:
        kfree(info);
@@@ -2374,13 -2361,7 +2373,13 @@@ static __devinit void try_init_dmi(stru
        if (info->irq)
                info->irq_setup = std_irq_setup;
  
 -      add_smi(info);
 +      pr_info("ipmi_si: SMBIOS: %s %#lx regsize %d spacing %d irq %d\n",
 +               (info->io.addr_type == IPMI_IO_ADDR_SPACE) ? "io" : "mem",
 +               info->io.addr_data, info->io.regsize, info->io.regspacing,
 +               info->irq);
 +
 +      if (add_smi(info))
 +              kfree(info);
  }
  
  static void __devinit dmi_find_bmc(void)
@@@ -2486,10 -2467,7 +2485,10 @@@ static int __devinit ipmi_pci_probe(str
                &pdev->resource[0], info->io.regsize, info->io.regspacing,
                info->irq);
  
 -      return add_smi(info);
 +      if (add_smi(info))
 +              kfree(info);
 +
 +      return 0;
  }
  
  static void __devexit ipmi_pci_remove(struct pci_dev *pdev)
@@@ -2531,7 -2509,7 +2530,7 @@@ static struct pci_driver ipmi_pci_drive
  
  
  #ifdef CONFIG_PPC_OF
 -static int __devinit ipmi_of_probe(struct of_device *dev,
 +static int __devinit ipmi_of_probe(struct platform_device *dev,
                         const struct of_device_id *match)
  {
        struct smi_info *info;
  
        dev_set_drvdata(&dev->dev, info);
  
 -      return add_smi(info);
 +      if (add_smi(info)) {
 +              kfree(info);
 +              return -EBUSY;
 +      }
 +
 +      return 0;
  }
  
 -static int __devexit ipmi_of_remove(struct of_device *dev)
 +static int __devexit ipmi_of_remove(struct platform_device *dev)
  {
        cleanup_one_si(dev_get_drvdata(&dev->dev));
        return 0;
@@@ -3040,8 -3013,6 +3039,8 @@@ static __devinit void default_find_bmc(
                                info->io.addr_data);
                        } else
                                cleanup_one_si(info);
 +              } else {
 +                      kfree(info);
                }
        }
  }
@@@ -3069,7 -3040,7 +3068,7 @@@ static int add_smi(struct smi_info *new
                        si_to_str[new_smi->si_type]);
        mutex_lock(&smi_infos_lock);
        if (!is_new_interface(new_smi)) {
 -              printk(KERN_CONT PFX "duplicate interface\n");
 +              printk(KERN_CONT duplicate interface\n");
                rv = -EBUSY;
                goto out_err;
        }
@@@ -3362,7 -3333,6 +3361,7 @@@ static __devinit int init_ipmi_si(void
  
  #ifdef CONFIG_ACPI
        pnp_register_driver(&ipmi_pnp_driver);
 +      pnp_registered = 1;
  #endif
  
  #ifdef CONFIG_DMI
@@@ -3530,8 -3500,7 +3529,8 @@@ static __exit void cleanup_ipmi_si(void
                pci_unregister_driver(&ipmi_pci_driver);
  #endif
  #ifdef CONFIG_ACPI
 -      pnp_unregister_driver(&ipmi_pnp_driver);
 +      if (pnp_registered)
 +              pnp_unregister_driver(&ipmi_pnp_driver);
  #endif
  
  #ifdef CONFIG_PPC_OF
index 6835c23e9a51a7a2799e4fd46cd92bba20f3ad97,273be76be988f88b019d8d607c2650cf6b9e9753..d962f25dcc2a730b912c139f7b7ae5f7c408ce8d
  #include <linux/fs.h>
  #include <linux/delay.h>
  #include <linux/bitrev.h>
 -#include <linux/smp_lock.h>
 +#include <linux/mutex.h>
  #include <linux/uaccess.h>
  #include <linux/io.h>
  
 -#include <pcmcia/cs.h>
  #include <pcmcia/cistpl.h>
  #include <pcmcia/cisreg.h>
  #include <pcmcia/ciscode.h>
@@@ -54,7 -55,7 +54,7 @@@
                           __func__ , ## args);         \
        } while (0)
  
 -static char *version = "cm4000_cs.c v2.4.0gm6 - All bugs added by Harald Welte";
 +static DEFINE_MUTEX(cmm_mutex);
  
  #define       T_1SEC          (HZ)
  #define       T_10MSEC        msecs_to_jiffies(10)
@@@ -1417,7 -1418,7 +1417,7 @@@ static long cmm_ioctl(struct file *filp
               iminor(inode), ioctl_names[_IOC_NR(cmd)]);
  #endif
  
 -      lock_kernel();
 +      mutex_lock(&cmm_mutex);
        rc = -ENODEV;
        link = dev_table[iminor(inode)];
        if (!pcmcia_dev_present(link)) {
                rc = -ENOTTY;
        }
  out:
 -      unlock_kernel();
 +      mutex_unlock(&cmm_mutex);
        return rc;
  }
  
@@@ -1639,7 -1640,7 +1639,7 @@@ static int cmm_open(struct inode *inode
        if (minor >= CM4000_MAX_DEV)
                return -ENODEV;
  
 -      lock_kernel();
 +      mutex_lock(&cmm_mutex);
        link = dev_table[minor];
        if (link == NULL || !pcmcia_dev_present(link)) {
                ret = -ENODEV;
        /* opening will always block since the
         * monitor will be started by open, which
         * means we have to wait for ATR becoming
-        * vaild = block until valid (or card
+        * valid = block until valid (or card
         * inserted)
         */
        if (filp->f_flags & O_NONBLOCK) {
        DEBUGP(2, dev, "<- cmm_open\n");
        ret = nonseekable_open(inode, filp);
  out:
 -      unlock_kernel();
 +      mutex_unlock(&cmm_mutex);
        return ret;
  }
  
@@@ -1741,8 -1742,20 +1741,8 @@@ static void cmm_cm4000_release(struct p
  
  /*==== Interface to PCMCIA Layer =======================================*/
  
 -static int cm4000_config_check(struct pcmcia_device *p_dev,
 -                             cistpl_cftable_entry_t *cfg,
 -                             cistpl_cftable_entry_t *dflt,
 -                             unsigned int vcc,
 -                             void *priv_data)
 +static int cm4000_config_check(struct pcmcia_device *p_dev, void *priv_data)
  {
 -      if (!cfg->io.nwin)
 -              return -ENODEV;
 -
 -      p_dev->resource[0]->start = cfg->io.win[0].base;
 -      p_dev->resource[0]->end = cfg->io.win[0].len;
 -      p_dev->resource[0]->flags |= pcmcia_io_cfg_data_width(cfg->io.flags);
 -      p_dev->io_lines = cfg->io.flags & CISTPL_IO_LINES_MASK;
 -
        return pcmcia_request_io(p_dev);
  }
  
@@@ -1750,13 -1763,13 +1750,13 @@@ static int cm4000_config(struct pcmcia_
  {
        struct cm4000_dev *dev;
  
 +      link->config_flags |= CONF_AUTO_SET_IO;
 +
        /* read the config-tuples */
        if (pcmcia_loop_config(link, cm4000_config_check, NULL))
                goto cs_release;
  
 -      link->conf.IntType = 00000002;
 -
 -      if (pcmcia_request_configuration(link, &link->conf))
 +      if (pcmcia_enable_device(link))
                goto cs_release;
  
        dev = link->priv;
@@@ -1816,6 -1829,7 +1816,6 @@@ static int cm4000_probe(struct pcmcia_d
  
        dev->p_dev = link;
        link->priv = dev;
 -      link->conf.IntType = INT_MEMORY_AND_IO;
        dev_table[i] = link;
  
        init_waitqueue_head(&dev->devq);
@@@ -1866,7 -1880,6 +1866,7 @@@ static const struct file_operations cm4
        .unlocked_ioctl = cmm_ioctl,
        .open   = cmm_open,
        .release= cmm_close,
 +      .llseek = no_llseek,
  };
  
  static struct pcmcia_device_id cm4000_ids[] = {
@@@ -1878,7 -1891,9 +1878,7 @@@ MODULE_DEVICE_TABLE(pcmcia, cm4000_ids)
  
  static struct pcmcia_driver cm4000_driver = {
        .owner    = THIS_MODULE,
 -      .drv      = {
 -              .name = "cm4000_cs",
 -              },
 +      .name     = "cm4000_cs",
        .probe    = cm4000_probe,
        .remove   = cm4000_detach,
        .suspend  = cm4000_suspend,
@@@ -1890,6 -1905,8 +1890,6 @@@ static int __init cmm_init(void
  {
        int rc;
  
 -      printk(KERN_INFO "%s\n", version);
 -
        cmm_class = class_create(THIS_MODULE, "cardman_4000");
        if (IS_ERR(cmm_class))
                return PTR_ERR(cmm_class);
  
  static void __exit cmm_exit(void)
  {
 -      printk(KERN_INFO MODULE_NAME ": unloading\n");
        pcmcia_unregister_driver(&cm4000_driver);
        unregister_chrdev(major, DEVICE_NAME);
        class_destroy(cmm_class);
diff --combined drivers/char/stallion.c
index 8ef16490810c6abb92e17022ebc42c9e6e5d1025,d7d7d4f9e76004e731ff51268cb12f7aa9e9398d..4bef6ab83622f5e0e71ed6532a7f4cca12397a1c
@@@ -608,7 -608,6 +608,7 @@@ static unsigned int        sc26198_baudtable[
  static const struct file_operations   stl_fsiomem = {
        .owner          = THIS_MODULE,
        .unlocked_ioctl = stl_memioctl,
 +      .llseek         = noop_llseek,
  };
  
  static struct class *stallion_class;
@@@ -3181,7 -3180,7 +3181,7 @@@ static void stl_cd1400flush(struct stlp
  
  /*
   *    Return the current state of data flow on this port. This is only
-  *    really interresting when determining if data has fully completed
+  *    really interesting when determining if data has fully completed
   *    transmission or not... This is easy for the cd1400, it accurately
   *    maintains the busy port flag.
   */
@@@ -4131,7 -4130,7 +4131,7 @@@ static void stl_sc26198flush(struct stl
  
  /*
   *    Return the current state of data flow on this port. This is only
-  *    really interresting when determining if data has fully completed
+  *    really interesting when determining if data has fully completed
   *    transmission or not... The sc26198 interrupt scheme cannot
   *    determine when all data has actually drained, so we need to
   *    check the port statusy register to be sure.
index 2941dca91aae3f949a04a29b02f32eed5a107bb8,413f0dfbbf757e904ed716cdc7da0dd1c3ceab5c..400de071cabc38fdc4b7e3575b0ed1ab5f44995f
@@@ -1,7 -1,7 +1,7 @@@
  /*
   * file for managing the edac_device class of devices for EDAC
   *
-  * (C) 2007 SoftwareBitMaker (http://www.softwarebitmaker.com)
+  * (C) 2007 SoftwareBitMaker 
   *
   * This file may be distributed under the terms of the
   * GNU General Public License.
@@@ -13,7 -13,6 +13,7 @@@
  #include <linux/ctype.h>
  #include <linux/module.h>
  #include <linux/slab.h>
 +#include <linux/edac.h>
  
  #include "edac_core.h"
  #include "edac_module.h"
@@@ -236,7 -235,7 +236,7 @@@ int edac_device_register_sysfs_main_kob
        debugf1("%s()\n", __func__);
  
        /* get the /sys/devices/system/edac reference */
 -      edac_class = edac_get_edac_class();
 +      edac_class = edac_get_sysfs_class();
        if (edac_class == NULL) {
                debugf1("%s() no edac_class error\n", __func__);
                err = -ENODEV;
  
        if (!try_module_get(edac_dev->owner)) {
                err = -ENODEV;
 -              goto err_out;
 +              goto err_mod_get;
        }
  
        /* register */
  err_kobj_reg:
        module_put(edac_dev->owner);
  
 +err_mod_get:
 +      edac_put_sysfs_class();
 +
  err_out:
        return err;
  }
   * edac_device_unregister_sysfs_main_kobj:
   *    the '..../edac/<name>' kobject
   */
 -void edac_device_unregister_sysfs_main_kobj(
 -                                      struct edac_device_ctl_info *edac_dev)
 +void edac_device_unregister_sysfs_main_kobj(struct edac_device_ctl_info *dev)
  {
        debugf0("%s()\n", __func__);
        debugf4("%s() name of kobject is: %s\n",
 -              __func__, kobject_name(&edac_dev->kobj));
 +              __func__, kobject_name(&dev->kobj));
  
        /*
         * Unregister the edac device's kobject and
         *   a) module_put() this module
         *   b) 'kfree' the memory
         */
 -      kobject_put(&edac_dev->kobj);
 +      kobject_put(&dev->kobj);
 +      edac_put_sysfs_class();
  }
  
  /* edac_dev -> instance information */
diff --combined drivers/firmware/Kconfig
index 88a3ae6cd02306784184fd3f31399da88840defd,af39bbd7394dfba9fc647cb40cfc8d9e8f78b1c0..e8b6a13515bdd4906a438e0b25c3319b832f0dbe
@@@ -74,7 -74,8 +74,8 @@@ config EFI_PCD
  
          You must also enable the appropriate drivers (serial, VGA, etc.)
  
-         See <http://www.dig64.org/specifications/DIG64_HCDPv20_042804.pdf>
+         See DIG64_HCDPv20_042804.pdf available from
+         <http://www.dig64.org/specifications/> 
  
  config DELL_RBU
        tristate "BIOS update support for DELL systems via sysfs"
@@@ -122,10 -123,18 +123,10 @@@ config ISCSI_IBFT_FIN
          is necessary for iSCSI Boot Firmware Table Attributes module to work
          properly.
  
 -config ISCSI_BOOT_SYSFS
 -      tristate "iSCSI Boot Sysfs Interface"
 -      default n
 -      help
 -        This option enables support for exposing iSCSI boot information
 -        via sysfs to userspace. If you wish to export this information,
 -        say Y. Otherwise, say N.
 -
  config ISCSI_IBFT
        tristate "iSCSI Boot Firmware Table Attributes module"
        select ISCSI_BOOT_SYSFS
 -      depends on ISCSI_IBFT_FIND
 +      depends on ISCSI_IBFT_FIND && SCSI && SCSI_LOWLEVEL
        default n
        help
          This option enables support for detection and exposing of iSCSI
index 949326d2a8e5b6b3609d002daa75795c7cff6566,045d63e374c3a9230321eb7e1251f97fbc215d1e..58e65f92c2328381121363793a17cf1fe6e4ab32
@@@ -76,7 -76,7 +76,7 @@@ EXPORT_SYMBOL(drm_mode_debug_printmodel
   * according to the hdisplay, vdisplay, vrefresh.
   * It is based from the VESA(TM) Coordinated Video Timing Generator by
   * Graham Loveridge April 9, 2003 available at
-  * http://www.vesa.org/public/CVT/CVTd6r1.xls
+  * http://www.elo.utfsm.cl/~elo212/docs/CVTd6r1.xls 
   *
   * And it is copied from xf86CVTmode in xserver/hw/xfree86/modes/xf86cvt.c.
   * What I have done is to translate it by using integer calculation.
@@@ -251,10 -251,7 +251,10 @@@ struct drm_display_mode *drm_cvt_mode(s
                drm_mode->htotal = drm_mode->hdisplay + CVT_RB_H_BLANK;
                /* Fill in HSync values */
                drm_mode->hsync_end = drm_mode->hdisplay + CVT_RB_H_BLANK / 2;
 -              drm_mode->hsync_start = drm_mode->hsync_end = CVT_RB_H_SYNC;
 +              drm_mode->hsync_start = drm_mode->hsync_end - CVT_RB_H_SYNC;
 +              /* Fill in VSync values */
 +              drm_mode->vsync_start = drm_mode->vdisplay + CVT_RB_VFPORCH;
 +              drm_mode->vsync_end = drm_mode->vsync_start + vsync;
        }
        /* 15/13. Find pixel clock frequency (kHz for xf86) */
        drm_mode->clock = drm_mode->htotal * HV_FACTOR * 1000 / hperiod;
index fcc79b5d22d1de44f1b76e9f2793b0b0aa95ba80,8de578ee4987d8c0c31b4d02e35779c5cc7f5ae3..6d64a2705f1236012fe596b3cab90d8311117c56
@@@ -72,7 -72,7 +72,7 @@@ int radeon_cs_parser_relocs(struct rade
                        if (p->relocs[i].gobj == NULL) {
                                DRM_ERROR("gem object lookup failed 0x%x\n",
                                          r->handle);
 -                              return -EINVAL;
 +                              return -ENOENT;
                        }
                        p->relocs_ptr[i] = &p->relocs[i];
                        p->relocs[i].robj = p->relocs[i].gobj->driver_private;
@@@ -268,7 -268,7 +268,7 @@@ int radeon_cs_ioctl(struct drm_device *
        }
        r = radeon_ib_schedule(rdev, parser.ib);
        if (r) {
-               DRM_ERROR("Faild to schedule IB !\n");
+               DRM_ERROR("Failed to schedule IB !\n");
        }
        radeon_cs_parser_fini(&parser, r);
        mutex_unlock(&rdev->cs_mutex);
index 0fe31766e4cf5f11e6025e5a85f96baa5936408f,dc043c3d53249ec8899cd0b874971ce5eb6af203..635c0ffee7fe8671945d0553ba346afe6ea565b4
@@@ -106,7 -106,6 +106,7 @@@ int vmw_fifo_init(struct vmw_private *d
        mutex_lock(&dev_priv->hw_mutex);
        dev_priv->enable_state = vmw_read(dev_priv, SVGA_REG_ENABLE);
        dev_priv->config_done_state = vmw_read(dev_priv, SVGA_REG_CONFIG_DONE);
 +      dev_priv->traces_state = vmw_read(dev_priv, SVGA_REG_TRACES);
        vmw_write(dev_priv, SVGA_REG_ENABLE, 1);
  
        min = 4;
@@@ -176,8 -175,6 +176,8 @@@ void vmw_fifo_release(struct vmw_privat
                  dev_priv->config_done_state);
        vmw_write(dev_priv, SVGA_REG_ENABLE,
                  dev_priv->enable_state);
 +      vmw_write(dev_priv, SVGA_REG_TRACES,
 +                dev_priv->traces_state);
  
        mutex_unlock(&dev_priv->hw_mutex);
        vmw_fence_queue_takedown(&fifo->fence_queue);
@@@ -545,7 -542,7 +545,7 @@@ int vmw_fifo_mmap(struct file *filp, st
        struct drm_file *file_priv;
        struct vmw_private *dev_priv;
  
-       file_priv = (struct drm_file *)filp->private_data;
+       file_priv = filp->private_data;
        dev_priv = vmw_priv(file_priv->minor->dev);
  
        if (vma->vm_pgoff != (dev_priv->mmio_start >> PAGE_SHIFT) ||
diff --combined drivers/hwmon/f75375s.c
index 9638d58f99fdb0e56f15832f824dc6096d99d3ea,3e2e10084ad9553f4d0dbb7a36f370d705f4b722..95cbfb3a7077c5901c65b1cdb9de3281a93a45c8
@@@ -6,10 -6,10 +6,10 @@@
   * Datasheets available at:
   *
   * f75375:
-  * http://www.fintek.com.tw/files/productfiles/2005111152950.pdf
+  * http://www.fintek.com.tw/files/productfiles/F75375_V026P.pdf 
   *
   * f75373:
-  * http://www.fintek.com.tw/files/productfiles/2005111153128.pdf
+  * http://www.fintek.com.tw/files/productfiles/F75373_V025P.pdf
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
@@@ -79,7 -79,7 +79,7 @@@ enum chips { f75373, f75375 }
  #define F75375_REG_PWM2_DROP_DUTY     0x6C
  
  #define FAN_CTRL_LINEAR(nr)           (4 + nr)
 -#define FAN_CTRL_MODE(nr)             (5 + ((nr) * 2))
 +#define FAN_CTRL_MODE(nr)             (4 + ((nr) * 2))
  
  /*
   * Data structures and manipulation thereof
@@@ -298,7 -298,7 +298,7 @@@ static int set_pwm_enable_direct(struc
                return -EINVAL;
  
        fanmode = f75375_read8(client, F75375_REG_FAN_TIMER);
 -      fanmode = ~(3 << FAN_CTRL_MODE(nr));
 +      fanmode &= ~(3 << FAN_CTRL_MODE(nr));
  
        switch (val) {
        case 0: /* Full speed */
@@@ -350,7 -350,7 +350,7 @@@ static ssize_t set_pwm_mode(struct devi
  
        mutex_lock(&data->update_lock);
        conf = f75375_read8(client, F75375_REG_CONFIG1);
 -      conf = ~(1 << FAN_CTRL_LINEAR(nr));
 +      conf &= ~(1 << FAN_CTRL_LINEAR(nr));
  
        if (val == 0)
                conf |= (1 << FAN_CTRL_LINEAR(nr)) ;
diff --combined drivers/ide/ide-disk.c
index 7c5b01ce51d24c05dd560070697a03c81d79ce6c,471bb0d42eb00a3d2f47314f4fbbf8beb37d4899..274798068a54648c0b504045982a02fda95c0892
@@@ -435,12 -435,11 +435,11 @@@ static int idedisk_prep_fn(struct reque
        if (!(rq->cmd_flags & REQ_FLUSH))
                return BLKPREP_OK;
  
-       cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC);
+       cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
  
        /* FIXME: map struct ide_taskfile on rq->cmd[] */
        BUG_ON(cmd == NULL);
  
-       memset(cmd, 0, sizeof(*cmd));
        if (ata_id_flush_ext_enabled(drive->id) &&
            (drive->capacity64 >= (1UL << 28)))
                cmd->tf.command = ATA_CMD_FLUSH_EXT;
@@@ -516,10 -515,10 +515,10 @@@ static int ide_do_setfeature(ide_drive_
        return ide_no_data_taskfile(drive, &cmd);
  }
  
 -static void update_ordered(ide_drive_t *drive)
 +static void update_flush(ide_drive_t *drive)
  {
        u16 *id = drive->id;
 -      unsigned ordered = QUEUE_ORDERED_NONE;
 +      unsigned flush = 0;
  
        if (drive->dev_flags & IDE_DFLAG_WCACHE) {
                unsigned long long capacity;
                       drive->name, barrier ? "" : "not ");
  
                if (barrier) {
 -                      ordered = QUEUE_ORDERED_DRAIN_FLUSH;
 +                      flush = REQ_FLUSH;
                        blk_queue_prep_rq(drive->queue, idedisk_prep_fn);
                }
 -      } else
 -              ordered = QUEUE_ORDERED_DRAIN;
 +      }
  
 -      blk_queue_ordered(drive->queue, ordered);
 +      blk_queue_flush(drive->queue, flush);
  }
  
  ide_devset_get_flag(wcache, IDE_DFLAG_WCACHE);
@@@ -571,7 -571,7 +570,7 @@@ static int set_wcache(ide_drive_t *driv
                }
        }
  
 -      update_ordered(drive);
 +      update_flush(drive);
  
        return err;
  }
index aa2be214270fcfc12a9d33d20f3c4054d8b8dc02,cef5d676120a542f043ca039f26b581a68a3a86a..79d9971aff1f6a0abb394c2090af702f2c4adbbc
@@@ -63,8 -63,7 +63,8 @@@ static const struct file_operations qib
        .open = qib_open,
        .release = qib_close,
        .poll = qib_poll,
 -      .mmap = qib_mmapf
 +      .mmap = qib_mmapf,
 +      .llseek = noop_llseek,
  };
  
  /*
@@@ -1723,7 -1722,7 +1723,7 @@@ static int qib_close(struct inode *in, 
  
        mutex_lock(&qib_mutex);
  
-       fd = (struct qib_filedata *) fp->private_data;
+       fd = fp->private_data;
        fp->private_data = NULL;
        rcd = fd->rcd;
        if (!rcd) {
@@@ -1809,7 -1808,7 +1809,7 @@@ static int qib_ctxt_info(struct file *f
        struct qib_ctxtdata *rcd = ctxt_fp(fp);
        struct qib_filedata *fd;
  
-       fd = (struct qib_filedata *) fp->private_data;
+       fd = fp->private_data;
  
        info.num_active = qib_count_active_units();
        info.unit = rcd->dd->unit;
index d0d221332db0562e424cf8e98304e8fbd2013947,f153fc20ad6e6635ebbec69b990542180e29760c..9e3e2c56659870a824c7ea3a110adfcfa218b920
@@@ -3,9 -3,9 +3,9 @@@
   *
   * Copyright (C) 2003, 2004 Colin Leroy, Rasmus Rohde, Benjamin Herrenschmidt
   *
-  * Documentation from
-  * http://www.analog.com/UploadedFiles/Data_Sheets/115254175ADT7467_pra.pdf
-  * http://www.analog.com/UploadedFiles/Data_Sheets/3686221171167ADT7460_b.pdf
+  * Documentation from 115254175ADT7467_pra.pdf and 3686221171167ADT7460_b.pdf
+  * http://www.onsemi.com/PowerSolutions/product.do?id=ADT7467
+  * http://www.onsemi.com/PowerSolutions/product.do?id=ADT7460
   *
   */
  
@@@ -84,7 -84,7 +84,7 @@@ struct thermostat 
  
  static enum {ADT7460, ADT7467} therm_type;
  static int therm_bus, therm_address;
 -static struct of_device * of_dev;
 +static struct platform_device * of_dev;
  static struct thermostat* thermostat;
  static struct task_struct *thread_therm = NULL;
  
index 893fbc57c72f59a6b3e1c8e2d58fff86031bed5c,f96c4a675c65ddbbe973c8538ef4eab7cfb7cd72..a12b88f53ed9dbc590e8d38707cbfbcbf5655adc
@@@ -26,7 -26,7 +26,7 @@@
   * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
   *
   *
-  * the project's page is at http://www.linuxtv.org/dvb/
+  * the project's page is at http://www.linuxtv.org/ 
   */
  
  
@@@ -730,7 -730,6 +730,7 @@@ static const struct file_operations dvb
        .unlocked_ioctl = dvb_generic_ioctl,
        .open           = dvb_generic_open,
        .release        = dvb_generic_release,
 +      .llseek         = noop_llseek,
  };
  
  static struct dvb_device dvbdev_osd = {
@@@ -2291,12 -2290,7 +2291,7 @@@ static int frontend_init(struct av7110 
  /* Budgetpatch note:
   * Original hardware design by Roberto Deza:
   * There is a DVB_Wiki at
-  * http://212.227.36.83/linuxtv/wiki/index.php/Main_Page
-  * where is described this 'DVB TT Budget Patch', on Card Modding:
-  * http://212.227.36.83/linuxtv/wiki/index.php/DVB_TT_Budget_Patch
-  * On the short description there is also a link to a external file,
-  * with more details:
-  * http://perso.wanadoo.es/jesussolano/Ttf_tsc1.zip
+  * http://www.linuxtv.org/
   *
   * New software triggering design by Emard that works on
   * original Roberto Deza's hardware:
index 6ef3996565adb3455b3cd4d141d9f2d25106ce01,878da6a19fbc92ce01df15e77144dbd00f845398..244d5d51f5f970fc950073d931b284cbed05e18a
@@@ -25,7 -25,7 +25,7 @@@
   * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
   *
   *
-  * the project's page is at http://www.linuxtv.org/dvb/
+  * the project's page is at http://www.linuxtv.org/ 
   */
  
  #include <linux/types.h>
@@@ -1521,7 -1521,6 +1521,7 @@@ static const struct file_operations dvb
        .open           = dvb_video_open,
        .release        = dvb_video_release,
        .poll           = dvb_video_poll,
 +      .llseek         = noop_llseek,
  };
  
  static struct dvb_device dvbdev_video = {
@@@ -1540,7 -1539,6 +1540,7 @@@ static const struct file_operations dvb
        .open           = dvb_audio_open,
        .release        = dvb_audio_release,
        .poll           = dvb_audio_poll,
 +      .llseek         = noop_llseek,
  };
  
  static struct dvb_device dvbdev_audio = {
index 43f61f2eca986a7542c6f5d827fc4a0fdf815df1,7564c2618947c4f0b49299e52c3e5fd20e7ca06c..122c72806916560ce6c3ce3c676e626c0ff7574d
@@@ -25,7 -25,7 +25,7 @@@
   * Or, point your browser to http://www.gnu.org/copyleft/gpl.html
   *
   *
-  * the project's page is at http://www.linuxtv.org/dvb/
+  * the project's page is at http://www.linuxtv.org/ 
   */
  
  #include <linux/kernel.h>
@@@ -353,7 -353,6 +353,7 @@@ static const struct file_operations dvb
        .open           = dvb_ca_open,
        .release        = dvb_generic_release,
        .poll           = dvb_ca_poll,
 +      .llseek         = default_llseek,
  };
  
  static struct dvb_device dvbdev_ca = {
diff --combined drivers/misc/Kconfig
index db2fbe2d4146541187c3630a6d6137d242770573,0c31927c1562f0426203afc97bca8e97bd2b71e1..1f69743b12ec036239fa6fe05540cec600c5b4b9
@@@ -112,8 -112,8 +112,8 @@@ config IBM_AS
  
          WARNING: This software may not be supported or function
          correctly on your IBM server. Please consult the IBM ServerProven
-         website <http://www.pc.ibm.com/ww/eserver/xseries/serverproven> for
-         information on the specific driver level and support statement
+         website <http://www-03.ibm.com/systems/info/x86servers/serverproven/compat/us/>
+         for information on the specific driver level and support statement
          for your IBM server.
  
  config PHANTOM
@@@ -248,15 -248,15 +248,15 @@@ config CS5535_CLOCK_EVENT_SR
          generic PIT, and are suitable for use as high-res timers.
  
  config HP_ILO
 -      tristate "Channel interface driver for HP iLO/iLO2 processor"
 +      tristate "Channel interface driver for the HP iLO processor"
        depends on PCI
        default n
        help
          The channel interface driver allows applications to communicate
 -        with iLO/iLO2 management processors present on HP ProLiant
 -        servers.  Upon loading, the driver creates /dev/hpilo/dXccbN files,
 -        which can be used to gather data from the management processor,
 -        via read and write system calls.
 +        with iLO management processors present on HP ProLiant servers.
 +        Upon loading, the driver creates /dev/hpilo/dXccbN files, which
 +        can be used to gather data from the management processor, via
 +        read and write system calls.
  
          To compile this driver as a module, choose M here: the
          module will be called hpilo.
@@@ -368,7 -368,7 +368,7 @@@ config VMWARE_BALLOO
          If unsure, say N.
  
          To compile this driver as a module, choose M here: the
 -        module will be called vmware_balloon.
 +        module will be called vmw_balloon.
  
  config ARM_CHARLCD
        bool "ARM Ltd. Character LCD Driver"
@@@ -385,23 -385,11 +385,23 @@@ config BMP08
        depends on I2C && SYSFS
        help
          If you say yes here you get support for the Bosch Sensortec
-         BMP086 digital pressure sensor.
+         BMP085 digital pressure sensor.
  
          To compile this driver as a module, choose M here: the
          module will be called bmp085.
  
 +config PCH_PHUB
 +      tristate "PCH Packet Hub of Intel Topcliff"
 +      depends on PCI
 +      help
 +        This driver is for PCH(Platform controller Hub) PHUB(Packet Hub) of
 +        Intel Topcliff which is an IOH(Input/Output Hub) for x86 embedded
 +        processor. The Topcliff has MAC address and Option ROM data in SROM.
 +        This driver can access MAC address and Option ROM data in SROM.
 +
 +        To compile this driver as a module, choose M here: the module will
 +        be called pch_phub.
 +
  source "drivers/misc/c2port/Kconfig"
  source "drivers/misc/eeprom/Kconfig"
  source "drivers/misc/cb710/Kconfig"
diff --combined drivers/net/Kconfig
index 7ca1fc8a3a766c7def1cd1063b3f09af4ed7e85b,2a34e214a7f977e50d10fbeb80e39f1695a6e4a7..77c1fab7d774d67e13f4befb797288967cb1699b
@@@ -2,9 -2,6 +2,9 @@@
  # Network device configuration
  #
  
 +config HAVE_NET_MACB
 +      bool
 +
  menuconfig NETDEVICES
        default y if UML
        depends on NET
@@@ -180,13 -177,6 +180,13 @@@ config NET_SB100
  
  source "drivers/net/arcnet/Kconfig"
  
 +config MII
 +      tristate "Generic Media Independent Interface device support"
 +      help
 +        Most ethernet controllers have MII transceiver either as an external
 +        or internal device.  It is safe to say Y or M here even if your
 +        ethernet card lacks MII.
 +
  source "drivers/net/phy/Kconfig"
  
  #
@@@ -222,9 -212,16 +222,9 @@@ menuconfig NET_ETHERNE
  
  if NET_ETHERNET
  
 -config MII
 -      tristate "Generic Media Independent Interface device support"
 -      help
 -        Most ethernet controllers have MII transceiver either as an external
 -        or internal device.  It is safe to say Y or M here even if your
 -        ethernet card lack MII.
 -
  config MACB
        tristate "Atmel MACB support"
 -      depends on AVR32 || ARCH_AT91SAM9260 || ARCH_AT91SAM9263 || ARCH_AT91SAM9G20 || ARCH_AT91SAM9G45 || ARCH_AT91CAP9
 +      depends on HAVE_NET_MACB
        select PHYLIB
        help
          The Atmel MACB ethernet interface is found on many AT32 and AT91
@@@ -924,23 -921,13 +924,23 @@@ config SMC91
          including the SMC91C94 and the SMC91C111. Say Y if you want it
          compiled into the kernel, and read the file
          <file:Documentation/networking/smc9.txt>  and the Ethernet-HOWTO,
-         available from  <http://www.linuxdoc.org/docs.html#howto>.
+         available from  <http://www.tldp.org/docs.html#howto>.
  
          This driver is also available as a module ( = code which can be
          inserted in and removed from the running kernel whenever you want).
          The module will be called smc91x.  If you want to compile it as a
          module, say M here and read <file:Documentation/kbuild/modules.txt>.
  
 +config PXA168_ETH
 +      tristate "Marvell pxa168 ethernet support"
 +      depends on CPU_PXA168
 +      select PHYLIB
 +      help
 +        This driver supports the pxa168 Ethernet ports.
 +
 +        To compile this driver as a module, choose M here. The module
 +        will be called pxa168_eth.
 +
  config NET_NETX
        tristate "NetX Ethernet support"
        select MII
@@@ -1034,7 -1021,7 +1034,7 @@@ config SMC911
          including the new LAN9115, LAN9116, LAN9117, and LAN9118.
          Say Y if you want it compiled into the kernel, 
          and read the Ethernet-HOWTO, available from
-         <http://www.linuxdoc.org/docs.html#howto>.
+         <http://www.tldp.org/docs.html#howto>.
  
          This driver is also available as a module. The module will be 
          called smc911x.  If you want to compile it as a module, say M 
@@@ -1516,7 -1503,7 +1516,7 @@@ config E10
  
          For the latest Intel PRO/100 network driver for Linux, see:
  
-         <http://appsr.intel.com/scripts-df/support_intel.asp>
+         <http://www.intel.com/p/en_US/support/highlights/network/pro100plus>
  
          More specific information on configuring the driver is in 
          <file:Documentation/networking/e100.txt>.
@@@ -1542,9 -1529,8 +1542,8 @@@ config FEALN
        select CRC32
        select MII
        help
-         Say Y here to support the Mysom MTD-800 family of PCI-based Ethernet
-         cards. Specifications and data at
-         <http://www.myson.com.hk/mtd/datasheet/>.
+         Say Y here to support the Myson MTD-800 family of PCI-based Ethernet 
+         cards. <http://www.myson.com.tw/>
  
  config NATSEMI
        tristate "National Semiconductor DP8381x series PCI Ethernet support"
@@@ -1718,7 -1704,7 +1717,7 @@@ config SMSC942
          This is a driver for SMSC's LAN9420 PCI ethernet adapter.
          Say Y if you want it compiled into the kernel,
          and read the Ethernet-HOWTO, available from
-         <http://www.linuxdoc.org/docs.html#howto>.
+         <http://www.tldp.org/docs.html#howto>.
  
          This driver is also available as a module. The module will be
          called smsc9420.  If you want to compile it as a module, say M
@@@ -2431,7 -2417,7 +2430,7 @@@ config UGETH_TX_ON_DEMAN
  
  config MV643XX_ETH
        tristate "Marvell Discovery (643XX) and Orion ethernet support"
 -      depends on MV64X60 || PPC32 || PLAT_ORION
 +      depends on (MV64X60 || PPC32 || PLAT_ORION) && INET
        select INET_LRO
        select PHYLIB
        help
@@@ -2518,18 -2504,6 +2517,18 @@@ config S6GMA
  
  source "drivers/net/stmmac/Kconfig"
  
 +config PCH_GBE
 +      tristate "PCH Gigabit Ethernet"
 +      depends on PCI
 +      ---help---
 +        This is a gigabit ethernet driver for Topcliff PCH.
 +        Topcliff PCH is the platform controller hub that is used in Intel's
 +        general embedded platform.
 +        Topcliff PCH has Gigabit Ethernet interface.
 +        Using this interface, it is able to access system devices connected
 +        to Gigabit Ethernet.
 +        This driver enables Gigabit Ethernet function.
 +
  endif # NETDEV_1000
  
  #
@@@ -2565,7 -2539,7 +2564,7 @@@ config CHELSIO_T
            our website at <http://www.chelsio.com>.
  
            For customer support, please visit our customer support page at
-           <http://www.chelsio.com/support.htm>.
+           <http://www.chelsio.com/support.html>.
  
            Please send feedback to <linux-bugs@chelsio.com>.
  
@@@ -2597,7 -2571,7 +2596,7 @@@ config CHELSIO_T
          our website at <http://www.chelsio.com>.
  
          For customer support, please visit our customer support page at
-         <http://www.chelsio.com/support.htm>.
+         <http://www.chelsio.com/support.html>.
  
          Please send feedback to <linux-bugs@chelsio.com>.
  
@@@ -2622,7 -2596,7 +2621,7 @@@ config CHELSIO_T
          our website at <http://www.chelsio.com>.
  
          For customer support, please visit our customer support page at
-         <http://www.chelsio.com/support.htm>.
+         <http://www.chelsio.com/support.html>.
  
          Please send feedback to <linux-bugs@chelsio.com>.
  
@@@ -2645,7 -2619,7 +2644,7 @@@ config CHELSIO_T4V
          our website at <http://www.chelsio.com>.
  
          For customer support, please visit our customer support page at
-         <http://www.chelsio.com/support.htm>.
+         <http://www.chelsio.com/support.html>.
  
          Please send feedback to <linux-bugs@chelsio.com>.
  
@@@ -2818,7 -2792,7 +2817,7 @@@ config NI
  
  config PASEMI_MAC
        tristate "PA Semi 1/10Gbit MAC"
 -      depends on PPC_PASEMI && PCI
 +      depends on PPC_PASEMI && PCI && INET
        select PHYLIB
        select INET_LRO
        help
@@@ -2884,20 -2858,6 +2883,20 @@@ config QLG
          To compile this driver as a module, choose M here: the module
          will be called qlge.
  
 +config BNA
 +        tristate "Brocade 1010/1020 10Gb Ethernet Driver support"
 +        depends on PCI
 +        ---help---
 +          This driver supports Brocade 1010/1020 10Gb CEE capable Ethernet
 +          cards.
 +          To compile this driver as a module, choose M here: the module
 +          will be called bna.
 +
 +          For general information and support, go to the Brocade support
 +          website at:
 +
 +          <http://support.brocade.com>
 +
  source "drivers/net/sfc/Kconfig"
  
  source "drivers/net/benet/Kconfig"
@@@ -3231,17 -3191,6 +3230,17 @@@ config PPPO
          which contains instruction on how to use this driver (under 
          the heading "Kernel mode PPPoE").
  
 +config PPTP
 +      tristate "PPP over IPv4 (PPTP) (EXPERIMENTAL)"
 +      depends on EXPERIMENTAL && PPP && NET_IPGRE_DEMUX
 +      help
 +        Support for PPP over IPv4.(Point-to-Point Tunneling Protocol)
 +
 +        This driver requires pppd plugin to work in client mode or
 +        modified pptpd (poptop) to work in server mode.
 +        See http://accel-pptp.sourceforge.net/ for information how to
 +        utilize this module.
 +
  config PPPOATM
        tristate "PPP over ATM"
        depends on ATM && PPP
index 20f97e7017ceffa5bc85f87f77036d679bc1355e,f5a89164e779498ac1e554c7c253dc20aaccdc42..0b376a9909724e8b720b234cb7643322ad7bcf7e
@@@ -3,7 -3,6 +3,7 @@@
  #
  config ATALK
        tristate "Appletalk protocol support"
 +      depends on BKL # waiting to be removed from net/appletalk/ddp.c
        select LLC
        ---help---
          AppleTalk is the protocol that Apple computers can use to communicate
@@@ -19,7 -18,7 +19,7 @@@
  
          General information about how to connect Linux, Windows machines and
          Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>.  The
-         NET-3-HOWTO, available from
+         NET3-4-HOWTO, available from
          <http://www.tldp.org/docs.html#howto>, contains valuable
          information as well.
  
diff --combined drivers/net/atp.c
index dfd96b20547f2caa362050897568468e904bd3b6,0eee04426697078333e96ed581085eaef9d8b43e..f3459798b0e993bdc559898c214dc51919c59693
@@@ -68,7 -68,7 +68,7 @@@ static int xcvr[NUM_UNITS];                   /* The d
  
        In 1997 Realtek made available the documentation for the second generation
        RTL8012 chip, which has lead to several driver improvements.
-         http://www.realtek.com.tw/cn/cn.html
+         http://www.realtek.com.tw/
  
                                        Theory of Operation
  
@@@ -445,7 -445,7 +445,7 @@@ static int net_open(struct net_device *
        init_timer(&lp->timer);
        lp->timer.expires = jiffies + TIMED_CHECKER;
        lp->timer.data = (unsigned long)dev;
 -      lp->timer.function = &atp_timed_checker;    /* timer handler */
 +      lp->timer.function = atp_timed_checker;    /* timer handler */
        add_timer(&lp->timer);
  
        netif_start_queue(dev);
diff --combined drivers/net/epic100.c
index 32543a300b810aeddecc69db0c25d9cf8e44e0ff,c6e25716b2c2e58aaf876c1b9879031b7ab8991a..aa56963ad55820e2a763d64c102a36ae1b35dabf
@@@ -131,8 -131,8 +131,8 @@@ IIIa. Ring buffer
  
  IVb. References
  
- http://www.smsc.com/main/tools/discontinued/83c171.pdf
- http://www.smsc.com/main/tools/discontinued/83c175.pdf
+ http://www.smsc.com/media/Downloads_Public/discontinued/83c171.pdf
+ http://www.smsc.com/media/Downloads_Public/discontinued/83c175.pdf
  http://scyld.com/expert/NWay.html
  http://www.national.com/pf/DP/DP83840A.html
  
@@@ -758,7 -758,7 +758,7 @@@ static int epic_open(struct net_device 
        init_timer(&ep->timer);
        ep->timer.expires = jiffies + 3*HZ;
        ep->timer.data = (unsigned long)dev;
 -      ep->timer.function = &epic_timer;                               /* timer handler */
 +      ep->timer.function = epic_timer;                                /* timer handler */
        add_timer(&ep->timer);
  
        return 0;
diff --combined drivers/net/ibmlana.c
index 0037a696cd0a78e880e2e5968ded58a87b70bf17,8de327321c41002501228c52c939f0cc79f9bccf..94d9969ec0bbfa697c8d2e2487d58fcd032e51aa
@@@ -23,7 -23,7 +23,7 @@@ paper sources
    'LAN Technical Reference Ethernet Adapter Interface Version 1 Release 1.0
     Document Number SC30-3661-00' by IBM for info on the adapter itself
  
-   Also see http://www.natsemi.com/
+   Also see http://www.national.com/analog 
  
  special acknowledgements to:
    - Bob Eager for helping me out with documentation from IBM
@@@ -602,7 -602,7 +602,7 @@@ static void irqrx_handler(struct net_de
                                /* set up skb fields */
  
                                skb->protocol = eth_type_trans(skb, dev);
 -                              skb->ip_summed = CHECKSUM_NONE;
 +                              skb_checksum_none_assert(skb);
  
                                /* bookkeeping */
                                dev->stats.rx_packets++;
index 75155a27fdde50594f5626c2e412fd91a0c20c9a,aaf506c56ccb0a44466cad69ca2ef01b1aa7b8ec..14db09e2fa8b1cde0759eb19fd9c4544899168ee
@@@ -71,8 -71,6 +71,8 @@@ static DEFINE_PCI_DEVICE_TABLE(igb_pci_
        { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_SERDES), board_82575 },
        { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_SGMII), board_82575 },
        { PCI_VDEVICE(INTEL, E1000_DEV_ID_82580_COPPER_DUAL), board_82575 },
 +      { PCI_VDEVICE(INTEL, E1000_DEV_ID_DH89XXCC_SGMII), board_82575 },
 +      { PCI_VDEVICE(INTEL, E1000_DEV_ID_DH89XXCC_SERDES), board_82575 },
        { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576), board_82575 },
        { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_NS), board_82575 },
        { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_NS_SERDES), board_82575 },
@@@ -96,6 -94,7 +96,6 @@@ static int igb_setup_all_rx_resources(s
  static void igb_free_all_tx_resources(struct igb_adapter *);
  static void igb_free_all_rx_resources(struct igb_adapter *);
  static void igb_setup_mrqc(struct igb_adapter *);
 -void igb_update_stats(struct igb_adapter *);
  static int igb_probe(struct pci_dev *, const struct pci_device_id *);
  static void __devexit igb_remove(struct pci_dev *pdev);
  static int igb_sw_init(struct igb_adapter *);
@@@ -112,8 -111,7 +112,8 @@@ static void igb_update_phy_info(unsigne
  static void igb_watchdog(unsigned long);
  static void igb_watchdog_task(struct work_struct *);
  static netdev_tx_t igb_xmit_frame_adv(struct sk_buff *skb, struct net_device *);
 -static struct net_device_stats *igb_get_stats(struct net_device *);
 +static struct rtnl_link_stats64 *igb_get_stats64(struct net_device *dev,
 +                                               struct rtnl_link_stats64 *stats);
  static int igb_change_mtu(struct net_device *, int);
  static int igb_set_mac(struct net_device *, void *);
  static void igb_set_uta(struct igb_adapter *adapter);
@@@ -988,7 -986,7 +988,7 @@@ static void igb_clear_interrupt_scheme(
   * Attempt to configure interrupts using the best available
   * capabilities of the hardware and kernel.
   **/
 -static void igb_set_interrupt_capability(struct igb_adapter *adapter)
 +static int igb_set_interrupt_capability(struct igb_adapter *adapter)
  {
        int err;
        int numvecs, i;
@@@ -1054,10 -1052,8 +1054,10 @@@ msi_only
        if (!pci_enable_msi(adapter->pdev))
                adapter->flags |= IGB_FLAG_HAS_MSI;
  out:
 -      /* Notify the stack of the (possibly) reduced Tx Queue count. */
 -      adapter->netdev->real_num_tx_queues = adapter->num_tx_queues;
 +      /* Notify the stack of the (possibly) reduced queue counts. */
 +      netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues);
 +      return netif_set_real_num_rx_queues(adapter->netdev,
 +                                          adapter->num_rx_queues);
  }
  
  /**
@@@ -1156,9 -1152,7 +1156,9 @@@ static int igb_init_interrupt_scheme(st
        struct pci_dev *pdev = adapter->pdev;
        int err;
  
 -      igb_set_interrupt_capability(adapter);
 +      err = igb_set_interrupt_capability(adapter);
 +      if (err)
 +              return err;
  
        err = igb_alloc_q_vectors(adapter);
        if (err) {
@@@ -1536,9 -1530,7 +1536,9 @@@ void igb_down(struct igb_adapter *adapt
        netif_carrier_off(netdev);
  
        /* record the stats before reset*/
 -      igb_update_stats(adapter);
 +      spin_lock(&adapter->stats64_lock);
 +      igb_update_stats(adapter, &adapter->stats64);
 +      spin_unlock(&adapter->stats64_lock);
  
        adapter->link_speed = 0;
        adapter->link_duplex = 0;
@@@ -1691,7 -1683,7 +1691,7 @@@ static const struct net_device_ops igb_
        .ndo_open               = igb_open,
        .ndo_stop               = igb_close,
        .ndo_start_xmit         = igb_xmit_frame_adv,
 -      .ndo_get_stats          = igb_get_stats,
 +      .ndo_get_stats64        = igb_get_stats64,
        .ndo_set_rx_mode        = igb_set_rx_mode,
        .ndo_set_multicast_list = igb_set_rx_mode,
        .ndo_set_mac_address    = igb_set_mac,
@@@ -1864,10 -1856,8 +1864,10 @@@ static int __devinit igb_probe(struct p
        netdev->vlan_features |= NETIF_F_IPV6_CSUM;
        netdev->vlan_features |= NETIF_F_SG;
  
 -      if (pci_using_dac)
 +      if (pci_using_dac) {
                netdev->features |= NETIF_F_HIGHDMA;
 +              netdev->vlan_features |= NETIF_F_HIGHDMA;
 +      }
  
        if (hw->mac.type >= e1000_82576)
                netdev->features |= NETIF_F_SCTP_CSUM;
                goto err_eeprom;
        }
  
 -      setup_timer(&adapter->watchdog_timer, &igb_watchdog,
 +      setup_timer(&adapter->watchdog_timer, igb_watchdog,
                    (unsigned long) adapter);
 -      setup_timer(&adapter->phy_info_timer, &igb_update_phy_info,
 +      setup_timer(&adapter->phy_info_timer, igb_update_phy_info,
                    (unsigned long) adapter);
  
        INIT_WORK(&adapter->reset_task, igb_reset_task);
@@@ -2278,7 -2268,6 +2278,7 @@@ static int __devinit igb_sw_init(struc
        adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN;
        adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;
  
 +      spin_lock_init(&adapter->stats64_lock);
  #ifdef CONFIG_PCI_IOV
        if (hw->mac.type == e1000_82576)
                adapter->vfs_allocated_count = (max_vfs > 7) ? 7 : max_vfs;
@@@ -3486,9 -3475,7 +3486,9 @@@ static void igb_watchdog_task(struct wo
                }
        }
  
 -      igb_update_stats(adapter);
 +      spin_lock(&adapter->stats64_lock);
 +      igb_update_stats(adapter, &adapter->stats64);
 +      spin_unlock(&adapter->stats64_lock);
  
        for (i = 0; i < adapter->num_tx_queues; i++) {
                struct igb_ring *tx_ring = adapter->tx_ring[i];
@@@ -3540,7 -3527,7 +3540,7 @@@ enum latency_range 
   *      Stores a new ITR value based on strictly on packet size.  This
   *      algorithm is less sophisticated than that used in igb_update_itr,
   *      due to the difficulty of synchronizing statistics across multiple
-  *      receive rings.  The divisors and thresholds used by this fuction
+  *      receive rings.  The divisors and thresholds used by this function
   *      were determined based on theoretical maximum wire speed and testing
   *      data, in order to minimize response time while increasing bulk
   *      throughput.
@@@ -3555,8 -3542,6 +3555,8 @@@ static void igb_update_ring_itr(struct 
        int new_val = q_vector->itr_val;
        int avg_wire_size = 0;
        struct igb_adapter *adapter = q_vector->adapter;
 +      struct igb_ring *ring;
 +      unsigned int packets;
  
        /* For non-gigabit speeds, just fix the interrupt rate at 4000
         * ints/sec - ITR timer value of 120 ticks.
                goto set_itr_val;
        }
  
 -      if (q_vector->rx_ring && q_vector->rx_ring->total_packets) {
 -              struct igb_ring *ring = q_vector->rx_ring;
 -              avg_wire_size = ring->total_bytes / ring->total_packets;
 +      ring = q_vector->rx_ring;
 +      if (ring) {
 +              packets = ACCESS_ONCE(ring->total_packets);
 +
 +              if (packets)
 +                      avg_wire_size = ring->total_bytes / packets;
        }
  
 -      if (q_vector->tx_ring && q_vector->tx_ring->total_packets) {
 -              struct igb_ring *ring = q_vector->tx_ring;
 -              avg_wire_size = max_t(u32, avg_wire_size,
 -                                    (ring->total_bytes /
 -                                     ring->total_packets));
 +      ring = q_vector->tx_ring;
 +      if (ring) {
 +              packets = ACCESS_ONCE(ring->total_packets);
 +
 +              if (packets)
 +                      avg_wire_size = max_t(u32, avg_wire_size,
 +                                            ring->total_bytes / packets);
        }
  
        /* if avg_wire_size isn't set no work was done */
@@@ -3974,7 -3954,7 +3974,7 @@@ static inline int igb_tx_map_adv(struc
        }
  
        tx_ring->buffer_info[i].skb = skb;
 -      tx_ring->buffer_info[i].shtx = skb_shinfo(skb)->tx_flags;
 +      tx_ring->buffer_info[i].tx_flags = skb_shinfo(skb)->tx_flags;
        /* multiply data chunks by size of headers */
        tx_ring->buffer_info[i].bytecount = ((gso_segs - 1) * hlen) + skb->len;
        tx_ring->buffer_info[i].gso_segs = gso_segs;
@@@ -4089,11 -4069,7 +4089,11 @@@ static int __igb_maybe_stop_tx(struct i
  
        /* A reprieve! */
        netif_wake_subqueue(netdev, tx_ring->queue_index);
 -      tx_ring->tx_stats.restart_queue++;
 +
 +      u64_stats_update_begin(&tx_ring->tx_syncp2);
 +      tx_ring->tx_stats.restart_queue2++;
 +      u64_stats_update_end(&tx_ring->tx_syncp2);
 +
        return 0;
  }
  
@@@ -4112,6 -4088,7 +4112,6 @@@ netdev_tx_t igb_xmit_frame_ring_adv(str
        u32 tx_flags = 0;
        u16 first;
        u8 hdr_len = 0;
 -      union skb_shared_tx *shtx = skb_tx(skb);
  
        /* need: 1 descriptor per page,
         *       + 2 desc gap to keep tail from touching head,
                return NETDEV_TX_BUSY;
        }
  
 -      if (unlikely(shtx->hardware)) {
 -              shtx->in_progress = 1;
 +      if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
 +              skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
                tx_flags |= IGB_TX_FLAGS_TSTAMP;
        }
  
 -      if (vlan_tx_tag_present(skb) && adapter->vlgrp) {
 +      if (vlan_tx_tag_present(skb)) {
                tx_flags |= IGB_TX_FLAGS_VLAN;
                tx_flags |= (vlan_tx_tag_get(skb) << IGB_TX_FLAGS_VLAN_SHIFT);
        }
@@@ -4230,22 -4207,16 +4230,22 @@@ static void igb_reset_task(struct work_
  }
  
  /**
 - * igb_get_stats - Get System Network Statistics
 + * igb_get_stats64 - Get System Network Statistics
   * @netdev: network interface device structure
 + * @stats: rtnl_link_stats64 pointer
   *
 - * Returns the address of the device statistics structure.
 - * The statistics are actually updated from the timer callback.
   **/
 -static struct net_device_stats *igb_get_stats(struct net_device *netdev)
 +static struct rtnl_link_stats64 *igb_get_stats64(struct net_device *netdev,
 +                                               struct rtnl_link_stats64 *stats)
  {
 -      /* only return the current stats */
 -      return &netdev->stats;
 +      struct igb_adapter *adapter = netdev_priv(netdev);
 +
 +      spin_lock(&adapter->stats64_lock);
 +      igb_update_stats(adapter, &adapter->stats64);
 +      memcpy(stats, &adapter->stats64, sizeof(*stats));
 +      spin_unlock(&adapter->stats64_lock);
 +
 +      return stats;
  }
  
  /**
@@@ -4327,17 -4298,15 +4327,17 @@@ static int igb_change_mtu(struct net_de
   * @adapter: board private structure
   **/
  
 -void igb_update_stats(struct igb_adapter *adapter)
 +void igb_update_stats(struct igb_adapter *adapter,
 +                    struct rtnl_link_stats64 *net_stats)
  {
 -      struct net_device_stats *net_stats = igb_get_stats(adapter->netdev);
        struct e1000_hw *hw = &adapter->hw;
        struct pci_dev *pdev = adapter->pdev;
        u32 reg, mpc;
        u16 phy_tmp;
        int i;
        u64 bytes, packets;
 +      unsigned int start;
 +      u64 _bytes, _packets;
  
  #define PHY_IDLE_ERROR_COUNT_MASK 0x00FF
  
        for (i = 0; i < adapter->num_rx_queues; i++) {
                u32 rqdpc_tmp = rd32(E1000_RQDPC(i)) & 0x0FFF;
                struct igb_ring *ring = adapter->rx_ring[i];
 +
                ring->rx_stats.drops += rqdpc_tmp;
                net_stats->rx_fifo_errors += rqdpc_tmp;
 -              bytes += ring->rx_stats.bytes;
 -              packets += ring->rx_stats.packets;
 +
 +              do {
 +                      start = u64_stats_fetch_begin_bh(&ring->rx_syncp);
 +                      _bytes = ring->rx_stats.bytes;
 +                      _packets = ring->rx_stats.packets;
 +              } while (u64_stats_fetch_retry_bh(&ring->rx_syncp, start));
 +              bytes += _bytes;
 +              packets += _packets;
        }
  
        net_stats->rx_bytes = bytes;
        packets = 0;
        for (i = 0; i < adapter->num_tx_queues; i++) {
                struct igb_ring *ring = adapter->tx_ring[i];
 -              bytes += ring->tx_stats.bytes;
 -              packets += ring->tx_stats.packets;
 +              do {
 +                      start = u64_stats_fetch_begin_bh(&ring->tx_syncp);
 +                      _bytes = ring->tx_stats.bytes;
 +                      _packets = ring->tx_stats.packets;
 +              } while (u64_stats_fetch_retry_bh(&ring->tx_syncp, start));
 +              bytes += _bytes;
 +              packets += _packets;
        }
        net_stats->tx_bytes = bytes;
        net_stats->tx_packets = packets;
@@@ -4703,13 -4660,12 +4703,13 @@@ static int igb_set_vf_promisc(struct ig
        u32 vmolr = rd32(E1000_VMOLR(vf));
        struct vf_data_storage *vf_data = &adapter->vf_data[vf];
  
 -      vf_data->flags |= ~(IGB_VF_FLAG_UNI_PROMISC |
 +      vf_data->flags &= ~(IGB_VF_FLAG_UNI_PROMISC |
                            IGB_VF_FLAG_MULTI_PROMISC);
        vmolr &= ~(E1000_VMOLR_ROPE | E1000_VMOLR_ROMPE | E1000_VMOLR_MPME);
  
        if (*msgbuf & E1000_VF_SET_PROMISC_MULTICAST) {
                vmolr |= E1000_VMOLR_MPME;
 +              vf_data->flags |= IGB_VF_FLAG_MULTI_PROMISC;
                *msgbuf &= ~E1000_VF_SET_PROMISC_MULTICAST;
        } else {
                /*
@@@ -5363,7 -5319,7 +5363,7 @@@ static void igb_tx_hwtstamp(struct igb_
        u64 regval;
  
        /* if skb does not support hw timestamp or TX stamp not valid exit */
 -      if (likely(!buffer_info->shtx.hardware) ||
 +      if (likely(!(buffer_info->tx_flags & SKBTX_HW_TSTAMP)) ||
            !(rd32(E1000_TSYNCTXCTL) & E1000_TSYNCTXCTL_VALID))
                return;
  
@@@ -5433,10 -5389,7 +5433,10 @@@ static bool igb_clean_tx_irq(struct igb
                if (__netif_subqueue_stopped(netdev, tx_ring->queue_index) &&
                    !(test_bit(__IGB_DOWN, &adapter->state))) {
                        netif_wake_subqueue(netdev, tx_ring->queue_index);
 +
 +                      u64_stats_update_begin(&tx_ring->tx_syncp);
                        tx_ring->tx_stats.restart_queue++;
 +                      u64_stats_update_end(&tx_ring->tx_syncp);
                }
        }
  
        }
        tx_ring->total_bytes += total_bytes;
        tx_ring->total_packets += total_packets;
 +      u64_stats_update_begin(&tx_ring->tx_syncp);
        tx_ring->tx_stats.bytes += total_bytes;
        tx_ring->tx_stats.packets += total_packets;
 -      return (count < tx_ring->count);
 +      u64_stats_update_end(&tx_ring->tx_syncp);
 +      return count < tx_ring->count;
  }
  
  /**
@@@ -5505,7 -5456,7 +5505,7 @@@ static void igb_receive_skb(struct igb_
  static inline void igb_rx_checksum_adv(struct igb_ring *ring,
                                       u32 status_err, struct sk_buff *skb)
  {
 -      skb->ip_summed = CHECKSUM_NONE;
 +      skb_checksum_none_assert(skb);
  
        /* Ignore Checksum bit is set or checksum is disabled through ethtool */
        if (!(ring->flags & IGB_RING_FLAG_RX_CSUM) ||
                 * packets, (aka let the stack check the crc32c)
                 */
                if ((skb->len == 60) &&
 -                  (ring->flags & IGB_RING_FLAG_RX_SCTP_CSUM))
 +                  (ring->flags & IGB_RING_FLAG_RX_SCTP_CSUM)) {
 +                      u64_stats_update_begin(&ring->rx_syncp);
                        ring->rx_stats.csum_err++;
 -
 +                      u64_stats_update_end(&ring->rx_syncp);
 +              }
                /* let the stack verify checksum errors */
                return;
        }
@@@ -5551,7 -5500,7 +5551,7 @@@ static void igb_rx_hwtstamp(struct igb_
         * values must belong to this one here and therefore we don't need to
         * compare any of the additional attributes stored for it.
         *
 -       * If nothing went wrong, then it should have a skb_shared_tx that we
 +       * If nothing went wrong, then it should have a shared tx_flags that we
         * can turn into a skb_shared_hwtstamps.
         */
        if (staterr & E1000_RXDADV_STAT_TSIP) {
@@@ -5712,10 -5661,8 +5712,10 @@@ next_desc
  
        rx_ring->total_packets += total_packets;
        rx_ring->total_bytes += total_bytes;
 +      u64_stats_update_begin(&rx_ring->rx_syncp);
        rx_ring->rx_stats.packets += total_packets;
        rx_ring->rx_stats.bytes += total_bytes;
 +      u64_stats_update_end(&rx_ring->rx_syncp);
        return cleaned;
  }
  
@@@ -5743,10 -5690,8 +5743,10 @@@ void igb_alloc_rx_buffers_adv(struct ig
                if ((bufsz < IGB_RXBUFFER_1024) && !buffer_info->page_dma) {
                        if (!buffer_info->page) {
                                buffer_info->page = netdev_alloc_page(netdev);
 -                              if (!buffer_info->page) {
 +                              if (unlikely(!buffer_info->page)) {
 +                                      u64_stats_update_begin(&rx_ring->rx_syncp);
                                        rx_ring->rx_stats.alloc_failed++;
 +                                      u64_stats_update_end(&rx_ring->rx_syncp);
                                        goto no_buffers;
                                }
                                buffer_info->page_offset = 0;
                        if (dma_mapping_error(rx_ring->dev,
                                              buffer_info->page_dma)) {
                                buffer_info->page_dma = 0;
 +                              u64_stats_update_begin(&rx_ring->rx_syncp);
                                rx_ring->rx_stats.alloc_failed++;
 +                              u64_stats_update_end(&rx_ring->rx_syncp);
                                goto no_buffers;
                        }
                }
                skb = buffer_info->skb;
                if (!skb) {
                        skb = netdev_alloc_skb_ip_align(netdev, bufsz);
 -                      if (!skb) {
 +                      if (unlikely(!skb)) {
 +                              u64_stats_update_begin(&rx_ring->rx_syncp);
                                rx_ring->rx_stats.alloc_failed++;
 +                              u64_stats_update_end(&rx_ring->rx_syncp);
                                goto no_buffers;
                        }
  
                        if (dma_mapping_error(rx_ring->dev,
                                              buffer_info->dma)) {
                                buffer_info->dma = 0;
 +                              u64_stats_update_begin(&rx_ring->rx_syncp);
                                rx_ring->rx_stats.alloc_failed++;
 +                              u64_stats_update_end(&rx_ring->rx_syncp);
                                goto no_buffers;
                        }
                }
@@@ -6153,7 -6092,7 +6153,7 @@@ static void igb_restore_vlan(struct igb
  
        if (adapter->vlgrp) {
                u16 vid;
 -              for (vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
 +              for (vid = 0; vid < VLAN_N_VID; vid++) {
                        if (!vlan_group_get_device(adapter->vlgrp, vid))
                                continue;
                        igb_vlan_rx_add_vid(adapter->netdev, vid);
@@@ -6168,13 -6107,6 +6168,13 @@@ int igb_set_spd_dplx(struct igb_adapte
  
        mac->autoneg = 0;
  
 +      /* Fiber NIC's only allow 1000 Gbps Full duplex */
 +      if ((adapter->hw.phy.media_type == e1000_media_type_internal_serdes) &&
 +              spddplx != (SPEED_1000 + DUPLEX_FULL)) {
 +              dev_err(&pdev->dev, "Unsupported Speed/Duplex configuration\n");
 +              return -EINVAL;
 +      }
 +
        switch (spddplx) {
        case SPEED_10 + DUPLEX_HALF:
                mac->forced_speed_duplex = ADVERTISE_10_HALF;
index 8dd03439d994290a016c872a84a0bf439a7e6393,627b619742e33b54e7e5013eb9f09bc0d7f58b81..1766dc4f07e171ebb88dd11c0b2acf5c85fe6d73
@@@ -78,7 -78,7 +78,7 @@@ that almost all frames will need to be 
  
  IVb. References
  
- http://www.realtek.com.tw/cn/cn.html
+ http://www.realtek.com.tw/
  http://www.scyld.com/expert/NWay.html
  
  IVc. Errata
@@@ -1125,7 -1125,7 +1125,7 @@@ static int netdrv_open(struct net_devic
        init_timer(&tp->timer);
        tp->timer.expires = jiffies + 3 * HZ;
        tp->timer.data = (unsigned long) dev;
 -      tp->timer.function = &netdrv_timer;
 +      tp->timer.function = netdrv_timer;
        add_timer(&tp->timer);
  
        DPRINTK("EXIT, returning 0\n");
index 2807a0fcadc4f7a8630d41a92173c2942ecbda1b,e09267965aadf64edac66286d484132bf03f8a95..321b12f826455c547df1bd87cbfac564448f32f1
@@@ -62,15 -62,13 +62,15 @@@ invalid ramWidth is Very Bad
  V. References
  
  http://www.scyld.com/expert/NWay.html
- http://www.national.com/pf/DP/DP83840.html
+ http://www.national.com/opf/DP/DP83840A.html
  
  Thanks to Terry Murphy of 3Com for providing development information for
  earlier 3Com products.
  
  */
  
 +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 +
  #include <linux/module.h>
  #include <linux/kernel.h>
  #include <linux/init.h>
  #include <linux/skbuff.h>
  #include <linux/if_arp.h>
  #include <linux/ioport.h>
 -#include <linux/ethtool.h>
  #include <linux/bitops.h>
  #include <linux/mii.h>
  
 -#include <pcmcia/cs.h>
  #include <pcmcia/cistpl.h>
  #include <pcmcia/cisreg.h>
  #include <pcmcia/ciscode.h>
@@@ -238,6 -238,7 +238,6 @@@ static int el3_rx(struct net_device *de
  static int el3_close(struct net_device *dev);
  static void el3_tx_timeout(struct net_device *dev);
  static int el3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 -static const struct ethtool_ops netdev_ethtool_ops;
  static void set_rx_mode(struct net_device *dev);
  static void set_multicast_list(struct net_device *dev);
  
@@@ -279,14 -280,25 +279,14 @@@ static int tc574_probe(struct pcmcia_de
        spin_lock_init(&lp->window_lock);
        link->resource[0]->end = 32;
        link->resource[0]->flags |= IO_DATA_PATH_WIDTH_16;
 -      link->conf.Attributes = CONF_ENABLE_IRQ;
 -      link->conf.IntType = INT_MEMORY_AND_IO;
 -      link->conf.ConfigIndex = 1;
 +      link->config_flags |= CONF_ENABLE_IRQ;
 +      link->config_index = 1;
  
        dev->netdev_ops = &el3_netdev_ops;
 -      SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
        dev->watchdog_timeo = TX_TIMEOUT;
  
        return tc574_config(link);
 -} /* tc574_attach */
 -
 -/*
 -
 -      This deletes a driver "instance".  The device is de-registered
 -      with Card Services.  If it has been released, all local data
 -      structures are freed.  Otherwise, the structures will be freed
 -      when the device is released.
 -
 -*/
 +}
  
  static void tc574_detach(struct pcmcia_device *link)
  {
        free_netdev(dev);
  } /* tc574_detach */
  
 -/*
 -      tc574_config() is scheduled to run after a CARD_INSERTION event
 -      is received, to configure the PCMCIA socket, and to make the
 -      ethernet device available to the system.
 -*/
 -
  static const char *ram_split[] = {"5:3", "3:1", "1:1", "3:5"};
  
  static int tc574_config(struct pcmcia_device *link)
        if (ret)
                goto failed;
  
 -      ret = pcmcia_request_configuration(link, &link->conf);
 +      ret = pcmcia_enable_device(link);
        if (ret)
                goto failed;
  
                for (i = 0; i < 3; i++)
                        phys_addr[i] = htons(read_eeprom(ioaddr, i + 10));
                if (phys_addr[0] == htons(0x6060)) {
 -                      printk(KERN_NOTICE "3c574_cs: IO port conflict at 0x%03lx"
 -                                 "-0x%03lx\n", dev->base_addr, dev->base_addr+15);
 +                      pr_notice("IO port conflict at 0x%03lx-0x%03lx\n",
 +                                dev->base_addr, dev->base_addr+15);
                        goto failed;
                }
        }
                outw(2<<11, ioaddr + RunnerRdCtrl);
                mcr = inb(ioaddr + 2);
                outw(0<<11, ioaddr + RunnerRdCtrl);
 -              printk(KERN_INFO "  ASIC rev %d,", mcr>>3);
 +              pr_info("  ASIC rev %d,", mcr>>3);
                EL3WINDOW(3);
                config = inl(ioaddr + Wn3_Config);
                lp->default_media = (config & Xcvr) >> Xcvr_shift;
                        }
                }
                if (phy > 32) {
 -                      printk(KERN_NOTICE "  No MII transceivers found!\n");
 +                      pr_notice("  No MII transceivers found!\n");
                        goto failed;
                }
                i = mdio_read(ioaddr, lp->phys, 16) | 0x40;
        SET_NETDEV_DEV(dev, &link->dev);
  
        if (register_netdev(dev) != 0) {
 -              printk(KERN_NOTICE "3c574_cs: register_netdev() failed\n");
 +              pr_notice("register_netdev() failed\n");
                goto failed;
        }
  
 -      printk(KERN_INFO "%s: %s at io %#3lx, irq %d, "
 -             "hw_addr %pM.\n",
 -             dev->name, cardname, dev->base_addr, dev->irq,
 -             dev->dev_addr);
 -      printk(" %dK FIFO split %s Rx:Tx, %sMII interface.\n",
 -                 8 << config & Ram_size,
 -                 ram_split[(config & Ram_split) >> Ram_split_shift],
 -                 config & Autoselect ? "autoselect " : "");
 +      netdev_info(dev, "%s at io %#3lx, irq %d, hw_addr %pM\n",
 +                  cardname, dev->base_addr, dev->irq, dev->dev_addr);
 +      netdev_info(dev, " %dK FIFO split %s Rx:Tx, %sMII interface.\n",
 +                  8 << config & Ram_size,
 +                  ram_split[(config & Ram_split) >> Ram_split_shift],
 +                  config & Autoselect ? "autoselect " : "");
  
        return 0;
  
@@@ -445,6 -465,12 +445,6 @@@ failed
  
  } /* tc574_config */
  
 -/*
 -      After a card is removed, tc574_release() will unregister the net
 -      device, and release the PCMCIA configuration.  If the device is
 -      still open, this will be postponed until it is closed.
 -*/
 -
  static void tc574_release(struct pcmcia_device *link)
  {
        pcmcia_disable_device(link);
@@@ -476,14 -502,14 +476,14 @@@ static void dump_status(struct net_devi
  {
        unsigned int ioaddr = dev->base_addr;
        EL3WINDOW(1);
 -      printk(KERN_INFO "  irq status %04x, rx status %04x, tx status "
 -                 "%02x, tx free %04x\n", inw(ioaddr+EL3_STATUS),
 -                 inw(ioaddr+RxStatus), inb(ioaddr+TxStatus),
 -                 inw(ioaddr+TxFree));
 +      netdev_info(dev, "  irq status %04x, rx status %04x, tx status %02x, tx free %04x\n",
 +                  inw(ioaddr+EL3_STATUS),
 +                  inw(ioaddr+RxStatus), inb(ioaddr+TxStatus),
 +                  inw(ioaddr+TxFree));
        EL3WINDOW(4);
 -      printk(KERN_INFO "  diagnostics: fifo %04x net %04x ethernet %04x"
 -                 " media %04x\n", inw(ioaddr+0x04), inw(ioaddr+0x06),
 -                 inw(ioaddr+0x08), inw(ioaddr+0x0a));
 +      netdev_info(dev, "  diagnostics: fifo %04x net %04x ethernet %04x media %04x\n",
 +                  inw(ioaddr+0x04), inw(ioaddr+0x06),
 +                  inw(ioaddr+0x08), inw(ioaddr+0x0a));
        EL3WINDOW(1);
  }
  
@@@ -497,7 -523,7 +497,7 @@@ static void tc574_wait_for_completion(s
        while (--i > 0)
                if (!(inw(dev->base_addr + EL3_STATUS) & 0x1000)) break;
        if (i == 0)
 -              printk(KERN_NOTICE "%s: command 0x%04x did not complete!\n", dev->name, cmd);
 +              netdev_notice(dev, "command 0x%04x did not complete!\n", cmd);
  }
  
  /* Read a word from the EEPROM using the regular EEPROM access register.
@@@ -684,7 -710,7 +684,7 @@@ static int el3_open(struct net_device *
        netif_start_queue(dev);
        
        tc574_reset(dev);
 -      lp->media.function = &media_check;
 +      lp->media.function = media_check;
        lp->media.data = (unsigned long) dev;
        lp->media.expires = jiffies + HZ;
        add_timer(&lp->media);
@@@ -699,7 -725,7 +699,7 @@@ static void el3_tx_timeout(struct net_d
  {
        unsigned int ioaddr = dev->base_addr;
        
 -      printk(KERN_NOTICE "%s: Transmit timed out!\n", dev->name);
 +      netdev_notice(dev, "Transmit timed out!\n");
        dump_status(dev);
        dev->stats.tx_errors++;
        dev->trans_start = jiffies; /* prevent tx timeout */
@@@ -822,8 -848,8 +822,8 @@@ static irqreturn_t el3_interrupt(int ir
                                EL3WINDOW(4);
                                fifo_diag = inw(ioaddr + Wn4_FIFODiag);
                                EL3WINDOW(1);
 -                              printk(KERN_NOTICE "%s: adapter failure, FIFO diagnostic"
 -                                         " register %04x.\n", dev->name, fifo_diag);
 +                              netdev_notice(dev, "adapter failure, FIFO diagnostic register %04x\n",
 +                                            fifo_diag);
                                if (fifo_diag & 0x0400) {
                                        /* Tx overrun */
                                        tc574_wait_for_completion(dev, TxReset);
@@@ -877,7 -903,7 +877,7 @@@ static void media_check(unsigned long a
           this, we can limp along even if the interrupt is blocked */
        if ((inw(ioaddr + EL3_STATUS) & IntLatch) && (inb(ioaddr + Timer) == 0xff)) {
                if (!lp->fast_poll)
 -                      printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name);
 +                      netdev_info(dev, "interrupt(s) dropped!\n");
  
                local_irq_save(flags);
                el3_interrupt(dev->irq, dev);
        
        if (media != lp->media_status) {
                if ((media ^ lp->media_status) & 0x0004)
 -                      printk(KERN_INFO "%s: %s link beat\n", dev->name,
 -                                 (lp->media_status & 0x0004) ? "lost" : "found");
 +                      netdev_info(dev, "%s link beat\n",
 +                                  (lp->media_status & 0x0004) ? "lost" : "found");
                if ((media ^ lp->media_status) & 0x0020) {
                        lp->partner = 0;
                        if (lp->media_status & 0x0020) {
 -                              printk(KERN_INFO "%s: autonegotiation restarted\n",
 -                                         dev->name);
 +                              netdev_info(dev, "autonegotiation restarted\n");
                        } else if (partner) {
                                partner &= lp->advertising;
                                lp->partner = partner;
 -                              printk(KERN_INFO "%s: autonegotiation complete: "
 -                                         "%sbaseT-%cD selected\n", dev->name,
 -                                         ((partner & 0x0180) ? "100" : "10"),
 -                                         ((partner & 0x0140) ? 'F' : 'H'));
 +                              netdev_info(dev, "autonegotiation complete: "
 +                                          "%dbaseT-%cD selected\n",
 +                                          (partner & 0x0180) ? 100 : 10,
 +                                          (partner & 0x0140) ? 'F' : 'H');
                        } else {
 -                              printk(KERN_INFO "%s: link partner did not autonegotiate\n",
 -                                         dev->name);
 +                              netdev_info(dev, "link partner did not autonegotiate\n");
                        }
  
                        EL3WINDOW(3);
  
                }
                if (media & 0x0010)
 -                      printk(KERN_INFO "%s: remote fault detected\n",
 -                                 dev->name);
 +                      netdev_info(dev, "remote fault detected\n");
                if (media & 0x0002)
 -                      printk(KERN_INFO "%s: jabber detected\n", dev->name);
 +                      netdev_info(dev, "jabber detected\n");
                lp->media_status = media;
        }
        spin_unlock_irqrestore(&lp->window_lock, flags);
@@@ -1036,6 -1065,16 +1036,6 @@@ static int el3_rx(struct net_device *de
        return worklimit;
  }
  
 -static void netdev_get_drvinfo(struct net_device *dev,
 -                             struct ethtool_drvinfo *info)
 -{
 -      strcpy(info->driver, "3c574_cs");
 -}
 -
 -static const struct ethtool_ops netdev_ethtool_ops = {
 -      .get_drvinfo            = netdev_get_drvinfo,
 -};
 -
  /* Provide ioctl() calls to examine the MII xcvr state. */
  static int el3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
  {
@@@ -1159,7 -1198,9 +1159,7 @@@ MODULE_DEVICE_TABLE(pcmcia, tc574_ids)
  
  static struct pcmcia_driver tc574_driver = {
        .owner          = THIS_MODULE,
 -      .drv            = {
 -              .name   = "3c574_cs",
 -      },
 +      .name           = "3c574_cs",
        .probe          = tc574_probe,
        .remove         = tc574_detach,
        .id_table       = tc574_ids,
index 5526ab4895e64163c7edb950765823b67b7b2cf4,49f6700e2ec290e1f641af8a3b2c7c8eb53cb256..5ecfa4b1e758f7db622700b9cc42452851d5ad78
@@@ -642,7 -642,7 +642,7 @@@ static inline void gelic_card_disable_r
        status = lv1_net_stop_rx_dma(bus_id(card), dev_id(card), 0);
        if (status)
                dev_err(ctodev(card),
-                       "lv1_net_stop_rx_dma faild, %d\n", status);
+                       "lv1_net_stop_rx_dma failed, %d\n", status);
  }
  
  /**
@@@ -660,7 -660,7 +660,7 @@@ static inline void gelic_card_disable_t
        status = lv1_net_stop_tx_dma(bus_id(card), dev_id(card), 0);
        if (status)
                dev_err(ctodev(card),
-                       "lv1_net_stop_tx_dma faild, status=%d\n", status);
+                       "lv1_net_stop_tx_dma failed, status=%d\n", status);
  }
  
  /**
@@@ -956,9 -956,9 +956,9 @@@ static void gelic_net_pass_skb_up(struc
                    (!(data_error & GELIC_DESCR_DATA_ERROR_CHK_MASK)))
                        skb->ip_summed = CHECKSUM_UNNECESSARY;
                else
 -                      skb->ip_summed = CHECKSUM_NONE;
 +                      skb_checksum_none_assert(skb);
        } else
 -              skb->ip_summed = CHECKSUM_NONE;
 +              skb_checksum_none_assert(skb);
  
        /* update netdevice statistics */
        netdev->stats.rx_packets++;
diff --combined drivers/net/sb1250-mac.c
index d8249d7653c6abdc108b87a1de3ff1ceb1ec05d4,a3f36be459b82343379053b4d75d56bef3d81a56..d96d2f7a3f14162592d2b9dd2121ace90693453e
@@@ -95,7 -95,7 +95,7 @@@ MODULE_PARM_DESC(int_timeout_rx, "RX ti
  #include <asm/sibyte/sb1250_regs.h>
  #include <asm/sibyte/sb1250_int.h>
  #else
- #error invalid SiByte MAC configuation
+ #error invalid SiByte MAC configuration
  #endif
  #include <asm/sibyte/sb1250_scd.h>
  #include <asm/sibyte/sb1250_mac.h>
  #elif defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
  #define UNIT_INT(n)           (K_INT_MAC_0 + (n))
  #else
- #error invalid SiByte MAC configuation
+ #error invalid SiByte MAC configuration
  #endif
  
  #ifdef K_INT_PHY
@@@ -1170,7 -1170,7 +1170,7 @@@ again
                                                sb->ip_summed = CHECKSUM_UNNECESSARY;
                                                /* don't need to set sb->csum */
                                        } else {
 -                                              sb->ip_summed = CHECKSUM_NONE;
 +                                              skb_checksum_none_assert(sb);
                                        }
                                }
                                prefetch(sb->data);
@@@ -1568,7 -1568,7 +1568,7 @@@ static void sbmac_channel_start(struct 
                       M_MAC_RX_ENABLE |
                       M_MAC_TX_ENABLE, s->sbm_macenable);
  #else
- #error invalid SiByte MAC configuation
+ #error invalid SiByte MAC configuration
  #endif
  
  #ifdef CONFIG_SBMAC_COALESCE
diff --combined drivers/net/sc92031.c
index 31b92f5f32cb60dc2a2404850a868ac00398ee97,12fb5607176c20c5f4e581e2d2910994a23757fc..417adf372828bca69bcc3fd8c274e29fdfb6ac8b
@@@ -15,7 -15,7 +15,7 @@@
   *  Rewritten for 2.6 by Cesar Eduardo Barros
   *
   *  A datasheet for this chip can be found at
-  *  http://www.silan.com.cn/english/products/pdf/SC92031AY.pdf
+  *  http://www.silan.com.cn/english/product/pdf/SC92031AY.pdf 
   */
  
  /* Note about set_mac_address: I don't know how to change the hardware
@@@ -1251,6 -1251,16 +1251,6 @@@ static int sc92031_ethtool_set_settings
        return 0;
  }
  
 -static void sc92031_ethtool_get_drvinfo(struct net_device *dev,
 -              struct ethtool_drvinfo *drvinfo)
 -{
 -      struct sc92031_priv *priv = netdev_priv(dev);
 -      struct pci_dev *pdev = priv->pdev;
 -
 -      strcpy(drvinfo->driver, SC92031_NAME);
 -      strcpy(drvinfo->bus_info, pci_name(pdev));
 -}
 -
  static void sc92031_ethtool_get_wol(struct net_device *dev,
                struct ethtool_wolinfo *wolinfo)
  {
@@@ -1372,6 -1382,7 +1372,6 @@@ static void sc92031_ethtool_get_ethtool
  static const struct ethtool_ops sc92031_ethtool_ops = {
        .get_settings           = sc92031_ethtool_get_settings,
        .set_settings           = sc92031_ethtool_set_settings,
 -      .get_drvinfo            = sc92031_ethtool_get_drvinfo,
        .get_wol                = sc92031_ethtool_get_wol,
        .set_wol                = sc92031_ethtool_set_wol,
        .nway_reset             = sc92031_ethtool_nway_reset,
diff --combined drivers/net/skfp/hwt.c
index e6baa53307c7aa5ddc74641fd0733809963526fd,465565e53a68b639553cdfdf864c2f9253a03929..c0798fd2ca6936e6b940e2e0b525a795afbe4ffe
@@@ -179,7 -179,7 +179,7 @@@ u_long hwt_read(struct s_smc *smc
                else
                        smc->hw.t_stop = smc->hw.t_start - tr ;
        }
 -      return (smc->hw.t_stop) ;
 +      return smc->hw.t_stop;
  }
  
  #ifdef        PCI
@@@ -208,7 -208,7 +208,7 @@@ u_long hwt_quick_read(struct s_smc *smc
        outpw(ADDR(B2_TI_CRTL), TIM_START) ;
        outpd(ADDR(B2_TI_INI),interval) ;
  
 -      return(time) ;
 +      return time;
  }
  
  /************************
   * para       start           start time
   *    duration        time to wait
   *
-  * NOTE: The fuction will return immediately, if the timer is not 
+  * NOTE: The function will return immediately, if the timer is not
   *     started
   ************************/
  void hwt_wait_time(struct s_smc *smc, u_long start, long int duration)
index ba2e8339fe90fa4fdbf0478c90c5e28e20ff63f2,0ade12a21d16f4a1bde38f63a8edd2408a5d3ad0..0a66fed52e8ed48e9a82bfdcfb831957acc491cf
@@@ -33,7 -33,7 +33,7 @@@
   *   The driver architecture is based on the DEC FDDI driver by
   *   Lawrence V. Stefani and several ethernet drivers.
   *   I also used an existing Windows NT miniport driver.
-  *   All hardware dependent fuctions are handled by the SysKonnect
+  *   All hardware dependent functions are handled by the SysKonnect
   *   Hardware Module.
   *   The only headerfiles that are directly related to this source
   *   are skfddi.c, h/types.h, h/osdef1st.h, h/targetos.h.
@@@ -209,7 -209,7 +209,7 @@@ static int skfp_init_one(struct pci_de
        void __iomem *mem;
        int err;
  
 -      pr_debug(KERN_INFO "entering skfp_init_one\n");
 +      pr_debug("entering skfp_init_one\n");
  
        if (num_boards == 0) 
                printk("%s\n", boot_msg);
@@@ -385,7 -385,7 +385,7 @@@ static  int skfp_driver_init(struct net
        skfddi_priv *bp = &smc->os;
        int err = -EIO;
  
 -      pr_debug(KERN_INFO "entering skfp_driver_init\n");
 +      pr_debug("entering skfp_driver_init\n");
  
        // set the io address in private structures
        bp->base_addr = dev->base_addr;
  
        // Determine the required size of the 'shared' memory area.
        bp->SharedMemSize = mac_drv_check_space();
 -      pr_debug(KERN_INFO "Memory for HWM: %ld\n", bp->SharedMemSize);
 +      pr_debug("Memory for HWM: %ld\n", bp->SharedMemSize);
        if (bp->SharedMemSize > 0) {
                bp->SharedMemSize += 16;        // for descriptor alignment
  
  
        card_stop(smc);         // Reset adapter.
  
 -      pr_debug(KERN_INFO "mac_drv_init()..\n");
 +      pr_debug("mac_drv_init()..\n");
        if (mac_drv_init(smc) != 0) {
 -              pr_debug(KERN_INFO "mac_drv_init() failed.\n");
 +              pr_debug("mac_drv_init() failed\n");
                goto fail;
        }
        read_address(smc, NULL);
 -      pr_debug(KERN_INFO "HW-Addr: %pMF\n", smc->hw.fddi_canon_addr.a);
 +      pr_debug("HW-Addr: %pMF\n", smc->hw.fddi_canon_addr.a);
        memcpy(dev->dev_addr, smc->hw.fddi_canon_addr.a, 6);
  
        smt_reset_defaults(smc, 0);
  
 -      return (0);
 +      return 0;
  
  fail:
        if (bp->SharedMemAddr) {
@@@ -485,7 -485,7 +485,7 @@@ static int skfp_open(struct net_device 
        struct s_smc *smc = netdev_priv(dev);
        int err;
  
 -      pr_debug(KERN_INFO "entering skfp_open\n");
 +      pr_debug("entering skfp_open\n");
        /* Register IRQ - support shared interrupts by passing device ptr */
        err = request_irq(dev->irq, skfp_interrupt, IRQF_SHARED,
                          dev->name, dev);
        mac_drv_rx_mode(smc, RX_DISABLE_PROMISC);
  
        netif_start_queue(dev);
 -      return (0);
 +      return 0;
  }                             // skfp_open
  
  
@@@ -565,7 -565,7 +565,7 @@@ static int skfp_close(struct net_devic
        skb_queue_purge(&bp->SendSkbQueue);
        bp->QueueSkb = MAX_TX_QUEUE_LEN;
  
 -      return (0);
 +      return 0;
  }                             // skfp_close
  
  
@@@ -794,7 -794,7 +794,7 @@@ static struct net_device_stats *skfp_ct
        bp->stats.port_lem_cts[1] = bp->cmd_rsp_virt->cntrs_get.cntrs.link_errors[1].ls;
  
  #endif
 -      return ((struct net_device_stats *) &bp->os.MacStat);
 +      return (struct net_device_stats *)&bp->os.MacStat;
  }                             // ctl_get_stat
  
  
@@@ -856,12 -856,12 +856,12 @@@ static void skfp_ctl_set_multicast_list
        /* Enable promiscuous mode, if necessary */
        if (dev->flags & IFF_PROMISC) {
                mac_drv_rx_mode(smc, RX_ENABLE_PROMISC);
 -              pr_debug(KERN_INFO "PROMISCUOUS MODE ENABLED\n");
 +              pr_debug("PROMISCUOUS MODE ENABLED\n");
        }
        /* Else, update multicast address table */
        else {
                mac_drv_rx_mode(smc, RX_DISABLE_PROMISC);
 -              pr_debug(KERN_INFO "PROMISCUOUS MODE DISABLED\n");
 +              pr_debug("PROMISCUOUS MODE DISABLED\n");
  
                // Reset all MC addresses
                mac_clear_multicast(smc);
  
                if (dev->flags & IFF_ALLMULTI) {
                        mac_drv_rx_mode(smc, RX_ENABLE_ALLMULTI);
 -                      pr_debug(KERN_INFO "ENABLE ALL MC ADDRESSES\n");
 +                      pr_debug("ENABLE ALL MC ADDRESSES\n");
                } else if (!netdev_mc_empty(dev)) {
                        if (netdev_mc_count(dev) <= FPMAX_MULTICAST) {
                                /* use exact filtering */
                                                (struct fddi_addr *)ha->addr,
                                                1);
  
 -                                      pr_debug(KERN_INFO "ENABLE MC ADDRESS: %pMF\n",
 -                                              ha->addr);
 +                                      pr_debug("ENABLE MC ADDRESS: %pMF\n",
 +                                               ha->addr);
                                }
  
                        } else {        // more MC addresses than HW supports
  
                                mac_drv_rx_mode(smc, RX_ENABLE_ALLMULTI);
 -                              pr_debug(KERN_INFO "ENABLE ALL MC ADDRESSES\n");
 +                              pr_debug("ENABLE ALL MC ADDRESSES\n");
                        }
                } else {        // no MC addresses
  
 -                      pr_debug(KERN_INFO "DISABLE ALL MC ADDRESSES\n");
 +                      pr_debug("DISABLE ALL MC ADDRESSES\n");
                }
  
                /* Update adapter filters */
@@@ -932,7 -932,7 +932,7 @@@ static int skfp_ctl_set_mac_address(str
        ResetAdapter(smc);
        spin_unlock_irqrestore(&bp->DriverLock, Flags);
  
 -      return (0);             /* always return zero */
 +      return 0;               /* always return zero */
  }                             // skfp_ctl_set_mac_address
  
  
@@@ -1045,7 -1045,7 +1045,7 @@@ static netdev_tx_t skfp_send_pkt(struc
        struct s_smc *smc = netdev_priv(dev);
        skfddi_priv *bp = &smc->os;
  
 -      pr_debug(KERN_INFO "skfp_send_pkt\n");
 +      pr_debug("skfp_send_pkt\n");
  
        /*
         * Verify that incoming transmit request is OK
@@@ -1114,13 -1114,13 +1114,13 @@@ static void send_queued_packets(struct 
  
        int frame_status;       // HWM tx frame status.
  
 -      pr_debug(KERN_INFO "send queued packets\n");
 +      pr_debug("send queued packets\n");
        for (;;) {
                // send first buffer from queue
                skb = skb_dequeue(&bp->SendSkbQueue);
  
                if (!skb) {
 -                      pr_debug(KERN_INFO "queue empty\n");
 +                      pr_debug("queue empty\n");
                        return;
                }               // queue empty !
  
@@@ -1232,7 -1232,7 +1232,7 @@@ static void CheckSourceAddress(unsigne
  static void ResetAdapter(struct s_smc *smc)
  {
  
 -      pr_debug(KERN_INFO "[fddi: ResetAdapter]\n");
 +      pr_debug("[fddi: ResetAdapter]\n");
  
        // Stop the adapter.
  
@@@ -1278,7 -1278,7 +1278,7 @@@ void llc_restart_tx(struct s_smc *smc
  {
        skfddi_priv *bp = &smc->os;
  
 -      pr_debug(KERN_INFO "[llc_restart_tx]\n");
 +      pr_debug("[llc_restart_tx]\n");
  
        // Try to send queued packets
        spin_unlock(&bp->DriverLock);
@@@ -1308,21 -1308,21 +1308,21 @@@ void *mac_drv_get_space(struct s_smc *s
  {
        void *virt;
  
 -      pr_debug(KERN_INFO "mac_drv_get_space (%d bytes), ", size);
 +      pr_debug("mac_drv_get_space (%d bytes), ", size);
        virt = (void *) (smc->os.SharedMemAddr + smc->os.SharedMemHeap);
  
        if ((smc->os.SharedMemHeap + size) > smc->os.SharedMemSize) {
                printk("Unexpected SMT memory size requested: %d\n", size);
 -              return (NULL);
 +              return NULL;
        }
        smc->os.SharedMemHeap += size;  // Move heap pointer.
  
 -      pr_debug(KERN_INFO "mac_drv_get_space end\n");
 -      pr_debug(KERN_INFO "virt addr: %lx\n", (ulong) virt);
 -      pr_debug(KERN_INFO "bus  addr: %lx\n", (ulong)
 +      pr_debug("mac_drv_get_space end\n");
 +      pr_debug("virt addr: %lx\n", (ulong) virt);
 +      pr_debug("bus  addr: %lx\n", (ulong)
               (smc->os.SharedMemDMA +
                ((char *) virt - (char *)smc->os.SharedMemAddr)));
 -      return (virt);
 +      return virt;
  }                             // mac_drv_get_space
  
  
@@@ -1349,7 -1349,7 +1349,7 @@@ void *mac_drv_get_desc_mem(struct s_sm
  
        char *virt;
  
 -      pr_debug(KERN_INFO "mac_drv_get_desc_mem\n");
 +      pr_debug("mac_drv_get_desc_mem\n");
  
        // Descriptor memory must be aligned on 16-byte boundary.
  
  
        if (!mac_drv_get_space(smc, size)) {
                printk("fddi: Unable to align descriptor memory.\n");
 -              return (NULL);
 +              return NULL;
        }
 -      return (virt + size);
 +      return virt + size;
  }                             // mac_drv_get_desc_mem
  
  
   ************************/
  unsigned long mac_drv_virt2phys(struct s_smc *smc, void *virt)
  {
 -      return (smc->os.SharedMemDMA +
 -              ((char *) virt - (char *)smc->os.SharedMemAddr));
 +      return smc->os.SharedMemDMA +
 +              ((char *) virt - (char *)smc->os.SharedMemAddr);
  }                             // mac_drv_virt2phys
  
  
   ************************/
  u_long dma_master(struct s_smc * smc, void *virt, int len, int flag)
  {
 -      return (smc->os.SharedMemDMA +
 -              ((char *) virt - (char *)smc->os.SharedMemAddr));
 +      return smc->os.SharedMemDMA +
 +              ((char *) virt - (char *)smc->os.SharedMemAddr);
  }                             // dma_master
  
  
@@@ -1493,7 -1493,7 +1493,7 @@@ void mac_drv_tx_complete(struct s_smc *
  {
        struct sk_buff *skb;
  
 -      pr_debug(KERN_INFO "entering mac_drv_tx_complete\n");
 +      pr_debug("entering mac_drv_tx_complete\n");
        // Check if this TxD points to a skb
  
        if (!(skb = txd->txd_os.skb)) {
        // free the skb
        dev_kfree_skb_irq(skb);
  
 -      pr_debug(KERN_INFO "leaving mac_drv_tx_complete\n");
 +      pr_debug("leaving mac_drv_tx_complete\n");
  }                             // mac_drv_tx_complete
  
  
@@@ -1580,7 -1580,7 +1580,7 @@@ void mac_drv_rx_complete(struct s_smc *
        unsigned short ri;
        u_int RifLength;
  
 -      pr_debug(KERN_INFO "entering mac_drv_rx_complete (len=%d)\n", len);
 +      pr_debug("entering mac_drv_rx_complete (len=%d)\n", len);
        if (frag_count != 1) {  // This is not allowed to happen.
  
                printk("fddi: Multi-fragment receive!\n");
        }
        skb = rxd->rxd_os.skb;
        if (!skb) {
 -              pr_debug(KERN_INFO "No skb in rxd\n");
 +              pr_debug("No skb in rxd\n");
                smc->os.MacStat.gen.rx_errors++;
                goto RequeueRxd;
        }
        else {
                int n;
  // goos: RIF removal has still to be tested
 -              pr_debug(KERN_INFO "RIF found\n");
 +              pr_debug("RIF found\n");
                // Get RIF length from Routing Control (RC) field.
                cp = virt + FDDI_MAC_HDR_LEN;   // Point behind MAC header.
  
        return;
  
        RequeueRxd:
 -      pr_debug(KERN_INFO "Rx: re-queue RXD.\n");
 +      pr_debug("Rx: re-queue RXD.\n");
        mac_drv_requeue_rxd(smc, rxd, frag_count);
        smc->os.MacStat.gen.rx_errors++;        // Count receive packets
                                                // not indicated.
@@@ -1775,7 -1775,7 +1775,7 @@@ void mac_drv_fill_rxd(struct s_smc *smc
        struct sk_buff *skb;
        volatile struct s_smt_fp_rxd *rxd;
  
 -      pr_debug(KERN_INFO "entering mac_drv_fill_rxd\n");
 +      pr_debug("entering mac_drv_fill_rxd\n");
  
        // Walk through the list of free receive buffers, passing receive
        // buffers to the HWM as long as RXDs are available.
        MaxFrameSize = smc->os.MaxFrameSize;
        // Check if there is any RXD left.
        while (HWM_GET_RX_FREE(smc) > 0) {
 -              pr_debug(KERN_INFO ".\n");
 +              pr_debug(".\n");
  
                rxd = HWM_GET_CURR_RXD(smc);
                skb = alloc_skb(MaxFrameSize + 3, GFP_ATOMIC);
                hwm_rx_frag(smc, v_addr, b_addr, MaxFrameSize,
                            FIRST_FRAG | LAST_FRAG);
        }
 -      pr_debug(KERN_INFO "leaving mac_drv_fill_rxd\n");
 +      pr_debug("leaving mac_drv_fill_rxd\n");
  }                             // mac_drv_fill_rxd
  
  
@@@ -1904,12 -1904,12 +1904,12 @@@ int mac_drv_rx_init(struct s_smc *smc, 
                pr_debug("fddi: Discard invalid local SMT frame\n");
                pr_debug("  len=%d, la_len=%d, (ULONG) look_ahead=%08lXh.\n",
                       len, la_len, (unsigned long) look_ahead);
 -              return (0);
 +              return 0;
        }
        skb = alloc_skb(len + 3, GFP_ATOMIC);
        if (!skb) {
                pr_debug("fddi: Local SMT: skb memory exhausted.\n");
 -              return (0);
 +              return 0;
        }
        skb_reserve(skb, 3);
        skb_put(skb, len);
        skb->protocol = fddi_type_trans(skb, smc->os.dev);
        netif_rx(skb);
  
 -      return (0);
 +      return 0;
  }                             // mac_drv_rx_init
  
  
@@@ -2034,17 -2034,17 +2034,17 @@@ void smt_stat_counter(struct s_smc *smc
  {
  //      BOOLEAN RingIsUp ;
  
 -      pr_debug(KERN_INFO "smt_stat_counter\n");
 +      pr_debug("smt_stat_counter\n");
        switch (stat) {
        case 0:
 -              pr_debug(KERN_INFO "Ring operational change.\n");
 +              pr_debug("Ring operational change.\n");
                break;
        case 1:
 -              pr_debug(KERN_INFO "Receive fifo overflow.\n");
 +              pr_debug("Receive fifo overflow.\n");
                smc->os.MacStat.gen.rx_errors++;
                break;
        default:
 -              pr_debug(KERN_INFO "Unknown status (%d).\n", stat);
 +              pr_debug("Unknown status (%d).\n", stat);
                break;
        }
  }                             // smt_stat_counter
@@@ -2100,10 -2100,10 +2100,10 @@@ void cfm_state_change(struct s_smc *smc
                s = "SC11_C_WRAP_S";
                break;
        default:
 -              pr_debug(KERN_INFO "cfm_state_change: unknown %d\n", c_state);
 +              pr_debug("cfm_state_change: unknown %d\n", c_state);
                return;
        }
 -      pr_debug(KERN_INFO "cfm_state_change: %s\n", s);
 +      pr_debug("cfm_state_change: %s\n", s);
  #endif                                // DRIVERDEBUG
  }                             // cfm_state_change
  
@@@ -2158,7 -2158,7 +2158,7 @@@ void ecm_state_change(struct s_smc *smc
                s = "unknown";
                break;
        }
 -      pr_debug(KERN_INFO "ecm_state_change: %s\n", s);
 +      pr_debug("ecm_state_change: %s\n", s);
  #endif                                //DRIVERDEBUG
  }                             // ecm_state_change
  
@@@ -2213,7 -2213,7 +2213,7 @@@ void rmt_state_change(struct s_smc *smc
                s = "unknown";
                break;
        }
 -      pr_debug(KERN_INFO "[rmt_state_change: %s]\n", s);
 +      pr_debug("[rmt_state_change: %s]\n", s);
  #endif                                // DRIVERDEBUG
  }                             // rmt_state_change
  
   ************************/
  void drv_reset_indication(struct s_smc *smc)
  {
 -      pr_debug(KERN_INFO "entering drv_reset_indication\n");
 +      pr_debug("entering drv_reset_indication\n");
  
        smc->os.ResetRequested = TRUE;  // Set flag.
  
diff --combined drivers/net/tlan.c
index ec8c804a795d09183967d6ef28e13c97551ab7d3,ef000b20d8afc8420cbc6b640cf38633a99f8582..f8e463cd8eccb7296524c7ec50ad6c3f7728c86d
@@@ -78,7 -78,7 +78,7 @@@
   *                         - Updated tlan.txt accordingly.
   *                         - Adjusted minimum/maximum frame length.
   *                         - There is now a TLAN website up at
-  *                           http://tlan.kernel.dk
+  *                           http://hp.sourceforge.net/ 
   *
   *    v1.7 April 07, 2000  - Started to implement custom ioctls. Driver now
   *                           reports PHY information when used with Donald
@@@ -393,7 -393,7 +393,7 @@@ TLan_SetTimer( struct net_device *dev, 
                        spin_unlock_irqrestore(&priv->lock, flags);
                return;
        }
 -      priv->timer.function = &TLan_Timer;
 +      priv->timer.function = TLan_Timer;
        if (!in_irq())
                spin_unlock_irqrestore(&priv->lock, flags);
  
@@@ -1453,7 -1453,7 +1453,7 @@@ static u32 TLan_HandleTxEOF( struct net
                TLan_DioWrite8( dev->base_addr,
                                TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT );
                if ( priv->timer.function == NULL ) {
 -                       priv->timer.function = &TLan_Timer;
 +                       priv->timer.function = TLan_Timer;
                         priv->timer.data = (unsigned long) dev;
                         priv->timer.expires = jiffies + TLAN_TIMER_ACT_DELAY;
                         priv->timerSetAt = jiffies;
@@@ -1601,7 -1601,7 +1601,7 @@@ drop_and_reuse
                TLan_DioWrite8( dev->base_addr,
                                TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT );
                if ( priv->timer.function == NULL )  {
 -                      priv->timer.function = &TLan_Timer;
 +                      priv->timer.function = TLan_Timer;
                        priv->timer.data = (unsigned long) dev;
                        priv->timer.expires = jiffies + TLAN_TIMER_ACT_DELAY;
                        priv->timerSetAt = jiffies;
@@@ -1897,7 -1897,7 +1897,7 @@@ static void TLan_Timer( unsigned long d
                                        TLan_DioWrite8( dev->base_addr,
                                                        TLAN_LED_REG, TLAN_LED_LINK );
                                } else  {
 -                                      priv->timer.function = &TLan_Timer;
 +                                      priv->timer.function = TLan_Timer;
                                        priv->timer.expires = priv->timerSetAt
                                                + TLAN_TIMER_ACT_DELAY;
                                        spin_unlock_irqrestore(&priv->lock, flags);
@@@ -3187,7 -3187,7 +3187,7 @@@ static int TLan_EeSendByte( u16 io_base
                TLan_SetBit( TLAN_NET_SIO_EDATA, sio );
        }
  
 -      return ( err );
 +      return err;
  
  } /* TLan_EeSendByte */
  
index c83f4f6e39e132c7772c4095d68f8e1ccfc6eca6,ccc16d6f5266086b356f94da8ed39f162b41ea73..663b8860a5317a4f37a41813e79fda4bd8159792
@@@ -5,7 -5,7 +5,7 @@@
   *  Originally sktr.c: Written 1997 by Christoph Goos
   *
   *  A fine result of the Linux Systems Network Architecture Project.
-  *  http://www.linux-sna.org
+  *  http://www.vanheusden.com/sna/ 
   *
   *  This software may be used and distributed according to the terms
   *  of the GNU General Public License, incorporated herein by reference.
@@@ -224,7 -224,7 +224,7 @@@ static int madgemc_sifprobe(struct net_
                  chk2 ^= 0x0FE;
  
                  if(chk1 != chk2)
 -                        return (-1);    /* No adapter */
 +                        return -1;    /* No adapter */
                  chk1 -= 2;
          } while(chk1 != 0);     /* Repeat 128 times (all byte values) */
  
          /* Restore the SIFADR value */
        SIFWRITEB(old, SIFADR);
  
 -        return (0);
 +        return 0;
  }
  #endif
  
@@@ -271,7 -271,7 +271,7 @@@ int tms380tr_open(struct net_device *de
        {
                printk(KERN_INFO "%s: Chipset initialization error\n", 
                        dev->name);
 -              return (-1);
 +              return -1;
        }
  
        tp->timer.expires       = jiffies + 30*HZ;
        if(tp->AdapterVirtOpenFlag == 0)
        {
                tms380tr_disable_interrupts(dev);
 -              return (-1);
 +              return -1;
        }
  
        tp->StartTime = jiffies;
        tp->timer.data          = (unsigned long)dev;
        add_timer(&tp->timer);
  
 -      return (0);
 +      return 0;
  }
  
  /*
@@@ -343,23 -343,23 +343,23 @@@ static int tms380tr_chipset_init(struc
                printk(KERN_DEBUG "%s: Resetting adapter...\n", dev->name);
        err = tms380tr_reset_adapter(dev);
        if(err < 0)
 -              return (-1);
 +              return -1;
  
        if(tms380tr_debug > 3)
                printk(KERN_DEBUG "%s: Bringup diags...\n", dev->name);
        err = tms380tr_bringup_diags(dev);
        if(err < 0)
 -              return (-1);
 +              return -1;
  
        if(tms380tr_debug > 3)
                printk(KERN_DEBUG "%s: Init adapter...\n", dev->name);
        err = tms380tr_init_adapter(dev);
        if(err < 0)
 -              return (-1);
 +              return -1;
  
        if(tms380tr_debug > 3)
                printk(KERN_DEBUG "%s: Done!\n", dev->name);
 -      return (0);
 +      return 0;
  }
  
  /*
@@@ -877,7 -877,7 +877,7 @@@ static unsigned char tms380tr_chk_ssb(s
           IrqType != STS_IRQ_COMMAND_STATUS &&
           IrqType != STS_IRQ_RING_STATUS)
        {
 -              return (1);     /* SSB not involved. */
 +              return 1;       /* SSB not involved. */
        }
  
        /* Note: All fields of the SSB have been set to all ones (-1) after it
         */
  
        if(ssb->STS == (unsigned short) -1)
 -              return (0);     /* Command field not yet available. */
 +              return 0;       /* Command field not yet available. */
        if(IrqType == STS_IRQ_COMMAND_STATUS)
 -              return (1);     /* Status fields not always affected. */
 +              return 1;       /* Status fields not always affected. */
        if(ssb->Parm[0] == (unsigned short) -1)
 -              return (0);     /* Status 1 field not yet available. */
 +              return 0;       /* Status 1 field not yet available. */
        if(IrqType == STS_IRQ_RING_STATUS)
 -              return (1);     /* Status 2 & 3 fields not affected. */
 +              return 1;       /* Status 2 & 3 fields not affected. */
  
        /* Note: At this point, the interrupt is either TRANSMIT or RECEIVE. */
        if(ssb->Parm[1] == (unsigned short) -1)
 -              return (0);     /* Status 2 field not yet available. */
 +              return 0;       /* Status 2 field not yet available. */
        if(ssb->Parm[2] == (unsigned short) -1)
 -              return (0);     /* Status 3 field not yet available. */
 +              return 0;       /* Status 3 field not yet available. */
  
 -      return (1);     /* All SSB fields have been written by the adapter. */
 +      return 1;       /* All SSB fields have been written by the adapter. */
  }
  
  /*
@@@ -1143,7 -1143,7 +1143,7 @@@ int tms380tr_close(struct net_device *d
  #endif
        tms380tr_cancel_tx_queue(tp);
  
 -      return (0);
 +      return 0;
  }
  
  /*
@@@ -1154,7 -1154,7 +1154,7 @@@ static struct net_device_stats *tms380t
  {
        struct net_local *tp = netdev_priv(dev);
  
 -      return ((struct net_device_stats *)&tp->MacStat);
 +      return (struct net_device_stats *)&tp->MacStat;
  }
  
  /*
@@@ -1256,7 -1256,7 +1256,7 @@@ static int tms380tr_reset_adapter(struc
        if (request_firmware(&fw_entry, "tms380tr.bin", tp->pdev) != 0) {
                printk(KERN_ALERT "%s: firmware %s is missing, cannot start.\n",
                        dev->name, "tms380tr.bin");
 -              return (-1);
 +              return -1;
        }
  
        fw_ptr = (unsigned short *)fw_entry->data;
  
                        /* Clear CPHALT and start BUD */
                        SIFWRITEW(c, SIFACL);
 -                      if (fw_entry)
 -                              release_firmware(fw_entry);
 -                      return (1);
 +                      release_firmware(fw_entry);
 +                      return 1;
                }
        } while(count == 0);
  
 -      if (fw_entry)
 -              release_firmware(fw_entry);
 +      release_firmware(fw_entry);
        printk(KERN_INFO "%s: Adapter Download Failed\n", dev->name);
 -      return (-1);
 +      return -1;
  }
  
  MODULE_FIRMWARE("tms380tr.bin");
@@@ -1363,7 -1365,7 +1363,7 @@@ static int tms380tr_bringup_diags(struc
                                printk(KERN_DEBUG " %04X\n", Status);
                        /* BUD successfully completed */
                        if(Status == STS_INITIALIZE)
 -                              return (1);
 +                              return 1;
                /* Unrecoverable hardware error, BUD not completed? */
                } while((loop_cnt > 0) && ((Status & (STS_ERROR | STS_TEST))
                        != (STS_ERROR | STS_TEST)));
        else
                printk(KERN_INFO "%s: Bring Up Diagnostics Error (%04X) occurred\n", dev->name, Status & 0x000f);
  
 -      return (-1);
 +      return -1;
  }
  
  /*
@@@ -1464,7 -1466,7 +1464,7 @@@ static int tms380tr_init_adapter(struc
                                {
                                        printk(KERN_INFO "%s: DMA failed\n", dev->name);
                                        /* DMA data error: wrong data in SCB */
 -                                      return (-1);
 +                                      return -1;
                                }
                                i++;
                        } while(i < 6);
                        do {    /* Test if contents of SSB is valid */
                                if(SSB_Test[i] != *(sb_ptr + i))
                                        /* DMA data error: wrong data in SSB */
 -                                      return (-1);
 +                                      return -1;
                                i++;
                        } while (i < 8);
  
 -                      return (1);     /* Adapter successfully initialized */
 +                      return 1;       /* Adapter successfully initialized */
                }
                else
                {
                                Status &= STS_ERROR_MASK;
                                /* ShowInitialisationErrorCode(Status); */
                                printk(KERN_INFO "%s: Status error: %d\n", dev->name, Status);
 -                              return (-1); /* Unrecoverable error */
 +                              return -1; /* Unrecoverable error */
                        }
                        else
                        {
        } while(retry_cnt > 0);
  
        printk(KERN_INFO "%s: Retry exceeded\n", dev->name);
 -      return (-1);
 +      return -1;
  }
  
  /*
index f3035951422f2cc295b15d4d680f5128c34397ce,14c02e12139fb1a40b3d2f2b9b8feb6ac6ec8fe8..1f8d4a8d8ea43ab09838026b3eb54f7ab881fdbc
@@@ -11,8 -11,8 +11,8 @@@ menuconfig NET_TULI
  if NET_TULIP
  
  config DE2104X
 -      tristate "Early DECchip Tulip (dc2104x) PCI support (EXPERIMENTAL)"
 -      depends on PCI && EXPERIMENTAL
 +      tristate "Early DECchip Tulip (dc2104x) PCI support"
 +      depends on PCI
        select CRC32
        ---help---
          This driver is developed for the SMC EtherPower series Ethernet
@@@ -151,7 -151,7 +151,7 @@@ config ULI526
        select CRC32
        ---help---
          This driver is for ULi M5261/M5263 10/100M Ethernet Controller
-         (<http://www.uli.com.tw/>).
+         (<http://www.nvidia.com/page/uli_drivers.html>).
  
          To compile this driver as a module, choose M here. The module will
          be called uli526x.
index 4a367cdb3eb93b93d369f56aa40f81f5d3a95f43,97659a077af8b9b5adf8edd155a534ff64f4a0b0..308b79e1ff0887a6c70e9c43ec0963c3b80b09ba
  #define AR5K_TUNE_ADDITIONAL_SWBA_BACKOFF     0
  #define AR5K_TUNE_RADAR_ALERT                 false
  #define AR5K_TUNE_MIN_TX_FIFO_THRES           1
 -#define AR5K_TUNE_MAX_TX_FIFO_THRES           ((IEEE80211_MAX_LEN / 64) + 1)
 +#define AR5K_TUNE_MAX_TX_FIFO_THRES   ((IEEE80211_MAX_FRAME_LEN / 64) + 1)
  #define AR5K_TUNE_REGISTER_TIMEOUT            20000
  /* Register for RSSI threshold has a mask of 0xff, so 255 seems to
   * be the max value. */
  #define ATH5K_TUNE_CALIBRATION_INTERVAL_ANI   1000    /* 1 sec */
  #define ATH5K_TUNE_CALIBRATION_INTERVAL_NF    60000   /* 60 sec */
  
 +#define ATH5K_TX_COMPLETE_POLL_INT            3000    /* 3 sec */
 +
  #define AR5K_INIT_CARR_SENSE_EN                       1
  
  /*Swap RX/TX Descriptor for big endian archs*/
        (AR5K_INIT_PROG_IFS_TURBO)                                      \
  )
  
 -/* token to use for aifs, cwmin, cwmax in MadWiFi */
 -#define       AR5K_TXQ_USEDEFAULT     ((u32) -1)
  
  /* GENERIC CHIPSET DEFINITIONS */
  
@@@ -343,12 -343,15 +343,12 @@@ struct ath5k_srev_name 
  #define AR5K_SREV_PHY_5413    0x61
  #define AR5K_SREV_PHY_2425    0x70
  
 -/* IEEE defs */
 -#define IEEE80211_MAX_LEN       2500
 -
  /* TODO add support to mac80211 for vendor-specific rates and modes */
  
  /*
   * Some of this information is based on Documentation from:
   *
-  * http://madwifi.org/wiki/ChipsetFeatures/SuperAG
+  * http://madwifi-project.org/wiki/ChipsetFeatures/SuperAG 
   *
   * Modulation for Atheros' eXtended Range - range enhancing extension that is
   * supposed to double the distance an Atheros client device can keep a
@@@ -528,9 -531,9 +528,9 @@@ struct ath5k_txq_info 
        enum ath5k_tx_queue tqi_type;
        enum ath5k_tx_queue_subtype tqi_subtype;
        u16     tqi_flags;      /* Tx queue flags (see above) */
 -      u32     tqi_aifs;       /* Arbitrated Interframe Space */
 -      s32     tqi_cw_min;     /* Minimum Contention Window */
 -      s32     tqi_cw_max;     /* Maximum Contention Window */
 +      u     tqi_aifs;       /* Arbitrated Interframe Space */
 +      u16     tqi_cw_min;     /* Minimum Contention Window */
 +      u16     tqi_cw_max;     /* Maximum Contention Window */
        u32     tqi_cbr_period; /* Constant bit rate period */
        u32     tqi_cbr_overflow_limit;
        u32     tqi_burst_time;
@@@ -1028,6 -1031,8 +1028,6 @@@ struct ath5k_hw 
        bool                    ah_turbo;
        bool                    ah_calibration;
        bool                    ah_single_chip;
 -      bool                    ah_aes_support;
 -      bool                    ah_combined_mic;
  
        enum ath5k_version      ah_version;
        enum ath5k_radio        ah_radio;
  #define ah_modes              ah_capabilities.cap_mode
  #define ah_ee_version         ah_capabilities.cap_eeprom.ee_version
  
 -      u32                     ah_atim_window;
 -      u32                     ah_aifs;
 -      u32                     ah_cw_min;
 -      u32                     ah_cw_max;
        u32                     ah_limit_tx_retries;
        u8                      ah_coverage_class;
  
@@@ -1181,7 -1190,7 +1181,7 @@@ extern int ath5k_hw_set_opmode(struct a
  void ath5k_hw_set_coverage_class(struct ath5k_hw *ah, u8 coverage_class);
  /* BSSID Functions */
  int ath5k_hw_set_lladdr(struct ath5k_hw *ah, const u8 *mac);
 -void ath5k_hw_set_associd(struct ath5k_hw *ah);
 +void ath5k_hw_set_bssid(struct ath5k_hw *ah);
  void ath5k_hw_set_bssid_mask(struct ath5k_hw *ah, const u8 *mask);
  /* Receive start/stop functions */
  void ath5k_hw_start_rx_pcu(struct ath5k_hw *ah);
@@@ -1195,13 -1204,17 +1195,13 @@@ u64 ath5k_hw_get_tsf64(struct ath5k_hw 
  void ath5k_hw_set_tsf64(struct ath5k_hw *ah, u64 tsf64);
  void ath5k_hw_reset_tsf(struct ath5k_hw *ah);
  void ath5k_hw_init_beacon(struct ath5k_hw *ah, u32 next_beacon, u32 interval);
 +bool ath5k_hw_check_beacon_timers(struct ath5k_hw *ah, int intval);
  /* ACK bit rate */
  void ath5k_hw_set_ack_bitrate_high(struct ath5k_hw *ah, bool high);
  /* Clock rate related functions */
  unsigned int ath5k_hw_htoclock(struct ath5k_hw *ah, unsigned int usec);
  unsigned int ath5k_hw_clocktoh(struct ath5k_hw *ah, unsigned int clock);
 -unsigned int ath5k_hw_get_clockrate(struct ath5k_hw *ah);
 -/* Key table (WEP) functions */
 -int ath5k_hw_reset_key(struct ath5k_hw *ah, u16 entry);
 -int ath5k_hw_set_key(struct ath5k_hw *ah, u16 entry,
 -                   const struct ieee80211_key_conf *key, const u8 *mac);
 -int ath5k_hw_set_key_lladdr(struct ath5k_hw *ah, u16 entry, const u8 *mac);
 +void ath5k_hw_set_clockrate(struct ath5k_hw *ah);
  
  /* Queue Control Unit, DFS Control Unit Functions */
  int ath5k_hw_get_tx_queueprops(struct ath5k_hw *ah, int queue,
index a34929f065330ba01f0e416952d4f7c2b3bf06c0,69a9b34ed45629a39d044a2cdfbdd5ffc3a5c3f3..ca79ecd832fd939d645ca55e03a03eab07b58eeb
@@@ -26,7 -26,6 +26,6 @@@
   * Atheros presentations and papers like these:
   *
   * 5210 - http://nova.stanford.edu/~bbaas/ps/isscc2002_slides.pdf
-  *        http://www.it.iitb.ac.in/~janak/wifire/01222734.pdf
   *
   * 5211 - http://www.hotchips.org/archives/hc14/3_Tue/16_mcfarland.pdf
   *
  
  
  /*
 - * PCU control register
 + * PCU Diagnostic register
   *
 - * Only DIS_RX is used in the code, the rest i guess are
 - * for tweaking/diagnostics.
 + * Used for tweaking/diagnostics.
   */
  #define AR5K_DIAG_SW_5210             0x8068                  /* Register Address [5210] */
  #define AR5K_DIAG_SW_5211             0x8048                  /* Register Address [5211+] */
  #define AR5K_DIAG_SW_DIS_WEP_ACK      0x00000001      /* Disable ACKs if WEP key is invalid */
  #define AR5K_DIAG_SW_DIS_ACK          0x00000002      /* Disable ACKs */
  #define AR5K_DIAG_SW_DIS_CTS          0x00000004      /* Disable CTSs */
 -#define AR5K_DIAG_SW_DIS_ENC          0x00000008      /* Disable encryption */
 -#define AR5K_DIAG_SW_DIS_DEC          0x00000010      /* Disable decryption */
 -#define AR5K_DIAG_SW_DIS_TX           0x00000020      /* Disable transmit [5210] */
 -#define AR5K_DIAG_SW_DIS_RX_5210      0x00000040      /* Disable recieve */
 +#define AR5K_DIAG_SW_DIS_ENC          0x00000008      /* Disable HW encryption */
 +#define AR5K_DIAG_SW_DIS_DEC          0x00000010      /* Disable HW decryption */
 +#define AR5K_DIAG_SW_DIS_TX_5210      0x00000020      /* Disable transmit [5210] */
 +#define AR5K_DIAG_SW_DIS_RX_5210      0x00000040      /* Disable receive */
  #define AR5K_DIAG_SW_DIS_RX_5211      0x00000020
  #define       AR5K_DIAG_SW_DIS_RX             (ah->ah_version == AR5K_AR5210 ? \
                                        AR5K_DIAG_SW_DIS_RX_5210 : AR5K_DIAG_SW_DIS_RX_5211)
 -#define AR5K_DIAG_SW_LOOP_BACK_5210   0x00000080      /* Loopback (i guess it goes with DIS_TX) [5210] */
 +#define AR5K_DIAG_SW_LOOP_BACK_5210   0x00000080      /* TX Data Loopback (i guess it goes with DIS_TX) [5210] */
  #define AR5K_DIAG_SW_LOOP_BACK_5211   0x00000040
  #define AR5K_DIAG_SW_LOOP_BACK                (ah->ah_version == AR5K_AR5210 ? \
                                        AR5K_DIAG_SW_LOOP_BACK_5210 : AR5K_DIAG_SW_LOOP_BACK_5211)
 -#define AR5K_DIAG_SW_CORR_FCS_5210    0x00000100      /* Corrupted FCS */
 +#define AR5K_DIAG_SW_CORR_FCS_5210    0x00000100      /* Generate invalid TX FCS */
  #define AR5K_DIAG_SW_CORR_FCS_5211    0x00000080
  #define AR5K_DIAG_SW_CORR_FCS         (ah->ah_version == AR5K_AR5210 ? \
                                        AR5K_DIAG_SW_CORR_FCS_5210 : AR5K_DIAG_SW_CORR_FCS_5211)
 -#define AR5K_DIAG_SW_CHAN_INFO_5210   0x00000200      /* Dump channel info */
 +#define AR5K_DIAG_SW_CHAN_INFO_5210   0x00000200      /* Add 56 bytes of channel info before the frame data in the RX buffer */
  #define AR5K_DIAG_SW_CHAN_INFO_5211   0x00000100
  #define AR5K_DIAG_SW_CHAN_INFO                (ah->ah_version == AR5K_AR5210 ? \
                                        AR5K_DIAG_SW_CHAN_INFO_5210 : AR5K_DIAG_SW_CHAN_INFO_5211)
  #define AR5K_DIAG_SW_SCVRAM_SEED      0x0003f800      /* [5210] */
  #define AR5K_DIAG_SW_SCRAM_SEED_M     0x0001fc00      /* Scrambler seed mask */
  #define AR5K_DIAG_SW_SCRAM_SEED_S     10
 -#define AR5K_DIAG_SW_DIS_SEQ_INC      0x00040000      /* Disable seqnum increment (?)[5210] */
 +#define AR5K_DIAG_SW_DIS_SEQ_INC_5210 0x00040000      /* Disable seqnum increment (?)[5210] */
  #define AR5K_DIAG_SW_FRAME_NV0_5210   0x00080000
  #define AR5K_DIAG_SW_FRAME_NV0_5211   0x00020000      /* Accept frames of non-zero protocol number */
  #define       AR5K_DIAG_SW_FRAME_NV0          (ah->ah_version == AR5K_AR5210 ? \
                                        AR5K_DIAG_SW_FRAME_NV0_5210 : AR5K_DIAG_SW_FRAME_NV0_5211)
  #define AR5K_DIAG_SW_OBSPT_M          0x000c0000      /* Observation point select (?) */
  #define AR5K_DIAG_SW_OBSPT_S          18
 -#define AR5K_DIAG_SW_RX_CLEAR_HIGH    0x0010000       /* Force RX Clear high */
 -#define AR5K_DIAG_SW_IGNORE_CARR_SENSE        0x0020000       /* Ignore virtual carrier sense */
 -#define AR5K_DIAG_SW_CHANEL_IDLE_HIGH 0x0040000       /* Force channel idle high */
 -#define AR5K_DIAG_SW_PHEAR_ME         0x0080000       /* ??? */
 +#define AR5K_DIAG_SW_RX_CLEAR_HIGH    0x00100000      /* Ignore carrier sense */
 +#define AR5K_DIAG_SW_IGNORE_CARR_SENSE        0x00200000      /* Ignore virtual carrier sense */
 +#define AR5K_DIAG_SW_CHANNEL_IDLE_HIGH        0x00400000      /* Force channel idle high */
 +#define AR5K_DIAG_SW_PHEAR_ME         0x00800000      /* ??? */
  
  /*
   * TSF (clock) register (lower 32 bits)
  
  /*===5212 end===*/
  
 -/*
 - * Key table (WEP) register
 - */
 -#define AR5K_KEYTABLE_0_5210          0x9000
 -#define AR5K_KEYTABLE_0_5211          0x8800
 -#define AR5K_KEYTABLE_5210(_n)                (AR5K_KEYTABLE_0_5210 + ((_n) << 5))
 -#define AR5K_KEYTABLE_5211(_n)                (AR5K_KEYTABLE_0_5211 + ((_n) << 5))
 -#define       AR5K_KEYTABLE(_n)               (ah->ah_version == AR5K_AR5210 ? \
 -                                      AR5K_KEYTABLE_5210(_n) : AR5K_KEYTABLE_5211(_n))
 -#define AR5K_KEYTABLE_OFF(_n, x)      (AR5K_KEYTABLE(_n) + (x << 2))
 -#define AR5K_KEYTABLE_TYPE(_n)                AR5K_KEYTABLE_OFF(_n, 5)
 -#define AR5K_KEYTABLE_TYPE_40         0x00000000
 -#define AR5K_KEYTABLE_TYPE_104                0x00000001
 -#define AR5K_KEYTABLE_TYPE_128                0x00000003
 -#define AR5K_KEYTABLE_TYPE_TKIP               0x00000004      /* [5212+] */
 -#define AR5K_KEYTABLE_TYPE_AES                0x00000005      /* [5211+] */
 -#define AR5K_KEYTABLE_TYPE_CCM                0x00000006      /* [5212+] */
 -#define AR5K_KEYTABLE_TYPE_NULL               0x00000007      /* [5211+] */
 -#define AR5K_KEYTABLE_ANTENNA         0x00000008      /* [5212+] */
 -#define AR5K_KEYTABLE_MAC0(_n)                AR5K_KEYTABLE_OFF(_n, 6)
 -#define AR5K_KEYTABLE_MAC1(_n)                AR5K_KEYTABLE_OFF(_n, 7)
 -#define AR5K_KEYTABLE_VALID           0x00008000
 -
 -/* If key type is TKIP and MIC is enabled
 - * MIC key goes in offset entry + 64 */
 -#define       AR5K_KEYTABLE_MIC_OFFSET        64
 -
 -/* WEP 40-bit = 40-bit  entered key + 24 bit IV = 64-bit
 - * WEP 104-bit        = 104-bit entered key + 24-bit IV = 128-bit
 - * WEP 128-bit        = 128-bit entered key + 24 bit IV = 152-bit
 - *
 - * Some vendors have introduced bigger WEP keys to address
 - * security vulnerabilities in WEP. This includes:
 - *
 - * WEP 232-bit = 232-bit entered key + 24 bit IV = 256-bit
 - *
 - * We can expand this if we find ar5k Atheros cards with a larger
 - * key table size.
 - */
  #define AR5K_KEYTABLE_SIZE_5210               64
  #define AR5K_KEYTABLE_SIZE_5211               128
 -#define       AR5K_KEYTABLE_SIZE              (ah->ah_version == AR5K_AR5210 ? \
 -                                      AR5K_KEYTABLE_SIZE_5210 : AR5K_KEYTABLE_SIZE_5211)
 -
  
  /*===PHY REGISTERS===*/
  
  #define       AR5K_PHY_TURBO                  0x9804                  /* Register Address */
  #define       AR5K_PHY_TURBO_MODE             0x00000001      /* Enable turbo mode */
  #define       AR5K_PHY_TURBO_SHORT            0x00000002      /* Set short symbols to turbo mode */
 -#define       AR5K_PHY_TURBO_MIMO             0x00000004      /* Set turbo for mimo mimo */
 +#define       AR5K_PHY_TURBO_MIMO             0x00000004      /* Set turbo for mimo */
  
  /*
   * PHY agility command register
index e5f45cb2a7a2334d839560d7c6366227f83c0030,8e823796cb94d5544dfd6ef60bccb772757edd33..25f965ffc889b210409443db9d106dad08b5ef91
@@@ -2,14 -2,13 +2,14 @@@ config P54_COMMO
        tristate "Softmac Prism54 support"
        depends on MAC80211 && EXPERIMENTAL
        select FW_LOADER
 +      select CRC_CCITT
        ---help---
          This is common code for isl38xx/stlc45xx based modules.
          This module does nothing by itself - the USB/PCI/SPI front-ends
          also need to be enabled in order to support any devices.
  
          These devices require softmac firmware which can be found at
-         http://prism54.org/
+         <http://wireless.kernel.org/en/users/Drivers/p54>
  
          If you choose to build a module, it'll be called p54common.
  
@@@ -21,7 -20,7 +21,7 @@@ config P54_US
          This driver is for USB isl38xx based wireless cards.
  
          These devices require softmac firmware which can be found at
-         http://prism54.org/
+         <http://wireless.kernel.org/en/users/Drivers/p54>
  
          If you choose to build a module, it'll be called p54usb.
  
@@@ -35,7 -34,7 +35,7 @@@ config P54_PC
          supported by the fullmac driver/firmware.
  
          This driver requires softmac firmware which can be found at
-         http://prism54.org/
+         <http://wireless.kernel.org/en/users/Drivers/p54>
  
          If you choose to build a module, it'll be called p54pci.
  
@@@ -49,23 -48,6 +49,23 @@@ config P54_SP
  
          If you choose to build a module, it'll be called p54spi.
  
 +config P54_SPI_DEFAULT_EEPROM
 +      bool "Include fallback EEPROM blob"
 +      depends on P54_SPI
 +      default n
 +      ---help---
 +       Unlike the PCI or USB devices, the SPI variants don't have
 +       a dedicated EEPROM chip to store all device specific values
 +       for calibration, country and interface settings.
 +
 +       The driver will try to load the image "3826.eeprom", if the
 +       file is put at the right place. (usually /lib/firmware.)
 +
 +       Only if this request fails, this option will provide a
 +       backup set of generic values to get the device working.
 +
 +       Enabling this option adds about 4k to p54spi.
 +
  config P54_LEDS
        bool
        depends on P54_COMMON && MAC80211_LEDS && (LEDS_CLASS = y || LEDS_CLASS = P54_COMMON)
diff --combined drivers/pci/quirks.c
index 857ae01734a66156c8abb92335be91cc674964a0,dcc333f2cb6a961e14aa6419ff7cb9b6dd057fab..cc96c7142dacdab47db9efbad91d345ec6590938
@@@ -162,26 -162,6 +162,26 @@@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_N
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC,    PCI_DEVICE_ID_NEC_CBUS_2,       quirk_isa_dma_hangs);
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC,    PCI_DEVICE_ID_NEC_CBUS_3,       quirk_isa_dma_hangs);
  
 +/*
 + * Intel NM10 "TigerPoint" LPC PM1a_STS.BM_STS must be clear
 + * for some HT machines to use C4 w/o hanging.
 + */
 +static void __devinit quirk_tigerpoint_bm_sts(struct pci_dev *dev)
 +{
 +      u32 pmbase;
 +      u16 pm1a;
 +
 +      pci_read_config_dword(dev, 0x40, &pmbase);
 +      pmbase = pmbase & 0xff80;
 +      pm1a = inw(pmbase);
 +
 +      if (pm1a & 0x10) {
 +              dev_info(&dev->dev, FW_BUG "TigerPoint LPC.BM_STS cleared\n");
 +              outw(0x10, pmbase);
 +      }
 +}
 +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TGP_LPC, quirk_tigerpoint_bm_sts);
 +
  /*
   *    Chipsets where PCI->PCI transfers vanish or hang
   */
@@@ -226,6 -206,7 +226,7 @@@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_I
   *    VIA Apollo KT133 needs PCI latency patch
   *    Made according to a windows driver based patch by George E. Breese
   *    see PCI Latency Adjust on http://www.viahardware.com/download/viatweak.shtm
+  *    and http://www.georgebreese.com/net/software/#PCI
   *      Also see http://www.au-ja.org/review-kt133a-1-en.phtml for
   *      the info on which Mr Breese based his work.
   *
@@@ -1016,7 -997,7 +1017,7 @@@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_
  /*
   * Common misconfiguration of the MediaGX/Geode PCI master that will
   * reduce PCI bandwidth from 70MB/s to 25MB/s.  See the GXM/GXLV/GX1
-  * datasheets found at http://www.national.com/ds/GX for info on what
+  * datasheets found at http://www.national.com/analog for info on what
   * these bits do.  <christer@weinigel.se>
   */
  static void quirk_mediagx_master(struct pci_dev *dev)
index 408dbaa080a17863e3e926cc2d6beba42ae05c2d,91a722518289bfbd1a9ad24358d71c476154f4a6..9dc565c615bdf3cd7117a929281a636ce3285cf4
@@@ -20,6 -20,7 +20,6 @@@
  #include <linux/slab.h>
  
  #include <pcmcia/ss.h>
 -#include <pcmcia/cs.h>
  
  #include "yenta_socket.h"
  #include "i82365.h"
@@@ -1072,7 -1073,7 +1072,7 @@@ static void yenta_config_init(struct ye
   * invisible during PCI scans because of a misconfigured subordinate number
   * of the parent brige - some BIOSes seem to be too lazy to set it right.
   * Does the fixup carefully by checking how far it can go without conflicts.
-  * See http\://bugzilla.kernel.org/show_bug.cgi?id=2944 for more information.
+  * See http://bugzilla.kernel.org/show_bug.cgi?id=2944 for more information.
   */
  static void yenta_fixup_parent_bridge(struct pci_bus *cardbus_bridge)
  {
diff --combined drivers/rtc/rtc-nuc900.c
index 62de66af0a682b5339d301fce1ae4ca0e7cf937a,08f95bd3adb3c2bc49bbddb447a5b2168634c0c3..ddb0857e15a4af29033c3dcb628c10a116462f76
@@@ -85,24 -85,25 +85,24 @@@ static irqreturn_t nuc900_rtc_interrupt
  
  static int *check_rtc_access_enable(struct nuc900_rtc *nuc900_rtc)
  {
 -      unsigned int i;
 +      unsigned int timeout = 0x1000;
        __raw_writel(INIRRESET, nuc900_rtc->rtc_reg + REG_RTC_INIR);
  
        mdelay(10);
  
        __raw_writel(AERPOWERON, nuc900_rtc->rtc_reg + REG_RTC_AER);
  
 -      for (i = 0; i < 1000; i++) {
 -              if (__raw_readl(nuc900_rtc->rtc_reg + REG_RTC_AER) & AERRWENB)
 -                      return 0;
 -      }
 +      while (!(__raw_readl(nuc900_rtc->rtc_reg + REG_RTC_AER) & AERRWENB)
 +                                                              && timeout--)
 +              mdelay(1);
  
 -      if ((__raw_readl(nuc900_rtc->rtc_reg + REG_RTC_AER) & AERRWENB) == 0x0)
 -              return ERR_PTR(-ENODEV);
 +      if (!timeout)
 +              return ERR_PTR(-EPERM);
  
 -      return ERR_PTR(-EPERM);
 +      return 0;
  }
  
 -static void nuc900_rtc_bcd2bin(unsigned int timereg,
 +static int nuc900_rtc_bcd2bin(unsigned int timereg,
                                unsigned int calreg, struct rtc_time *tm)
  {
        tm->tm_mday     = bcd2bin(calreg >> 0);
        tm->tm_min      = bcd2bin(timereg >> 8);
        tm->tm_hour     = bcd2bin(timereg >> 16);
  
 -      rtc_valid_tm(tm);
 +      return rtc_valid_tm(tm);
  }
  
 -static void nuc900_rtc_bin2bcd(struct rtc_time *settm,
 +static void nuc900_rtc_bin2bcd(struct device *dev, struct rtc_time *settm,
                                                struct nuc900_bcd_time *gettm)
  {
        gettm->bcd_mday = bin2bcd(settm->tm_mday) << 0;
        gettm->bcd_mon  = bin2bcd(settm->tm_mon) << 8;
 -      gettm->bcd_year = bin2bcd(settm->tm_year - 100) << 16;
 +
 +      if (settm->tm_year < 100) {
 +              dev_warn(dev, "The year will be between 1970-1999, right?\n");
 +              gettm->bcd_year = bin2bcd(settm->tm_year) << 16;
 +      } else {
 +              gettm->bcd_year = bin2bcd(settm->tm_year - 100) << 16;
 +      }
  
        gettm->bcd_sec  = bin2bcd(settm->tm_sec) << 0;
        gettm->bcd_min  = bin2bcd(settm->tm_min) << 8;
@@@ -170,7 -165,9 +170,7 @@@ static int nuc900_rtc_read_time(struct 
        timeval = __raw_readl(rtc->rtc_reg + REG_RTC_TLR);
        clrval  = __raw_readl(rtc->rtc_reg + REG_RTC_CLR);
  
 -      nuc900_rtc_bcd2bin(timeval, clrval, tm);
 -
 -      return 0;
 +      return nuc900_rtc_bcd2bin(timeval, clrval, tm);
  }
  
  static int nuc900_rtc_set_time(struct device *dev, struct rtc_time *tm)
        unsigned long val;
        int *err;
  
 -      nuc900_rtc_bin2bcd(tm, &gettm);
 +      nuc900_rtc_bin2bcd(dev, tm, &gettm);
  
        err = check_rtc_access_enable(rtc);
        if (IS_ERR(err))
@@@ -203,7 -200,9 +203,7 @@@ static int nuc900_rtc_read_alarm(struc
        timeval = __raw_readl(rtc->rtc_reg + REG_RTC_TAR);
        carval  = __raw_readl(rtc->rtc_reg + REG_RTC_CAR);
  
 -      nuc900_rtc_bcd2bin(timeval, carval, &alrm->time);
 -
 -      return 0;
 +      return nuc900_rtc_bcd2bin(timeval, carval, &alrm->time);
  }
  
  static int nuc900_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
        unsigned long val;
        int *err;
  
 -      nuc900_rtc_bin2bcd(&alrm->time, &tm);
 +      nuc900_rtc_bin2bcd(dev, &alrm->time, &tm);
  
        err = check_rtc_access_enable(rtc);
        if (IS_ERR(err))
@@@ -269,30 -268,29 +269,30 @@@ static int __devinit nuc900_rtc_probe(s
                goto fail2;
        }
  
 -      nuc900_rtc->irq_num = platform_get_irq(pdev, 0);
 -      if (request_irq(nuc900_rtc->irq_num, nuc900_rtc_interrupt,
 -                              IRQF_DISABLED, "nuc900rtc", nuc900_rtc)) {
 -              dev_err(&pdev->dev, "NUC900 RTC request irq failed\n");
 -              err = -EBUSY;
 -              goto fail3;
 -      }
 +      platform_set_drvdata(pdev, nuc900_rtc);
  
        nuc900_rtc->rtcdev = rtc_device_register(pdev->name, &pdev->dev,
                                                &nuc900_rtc_ops, THIS_MODULE);
        if (IS_ERR(nuc900_rtc->rtcdev)) {
-               dev_err(&pdev->dev, "rtc device register faild\n");
+               dev_err(&pdev->dev, "rtc device register failed\n");
                err = PTR_ERR(nuc900_rtc->rtcdev);
 -              goto fail4;
 +              goto fail3;
        }
  
 -      platform_set_drvdata(pdev, nuc900_rtc);
        __raw_writel(__raw_readl(nuc900_rtc->rtc_reg + REG_RTC_TSSR) | MODE24,
                                        nuc900_rtc->rtc_reg + REG_RTC_TSSR);
  
 +      nuc900_rtc->irq_num = platform_get_irq(pdev, 0);
 +      if (request_irq(nuc900_rtc->irq_num, nuc900_rtc_interrupt,
 +                              IRQF_DISABLED, "nuc900rtc", nuc900_rtc)) {
 +              dev_err(&pdev->dev, "NUC900 RTC request irq failed\n");
 +              err = -EBUSY;
 +              goto fail4;
 +      }
 +
        return 0;
  
 -fail4:        free_irq(nuc900_rtc->irq_num, nuc900_rtc);
 +fail4:        rtc_device_unregister(nuc900_rtc->rtcdev);
  fail3:        iounmap(nuc900_rtc->rtc_reg);
  fail2:        release_mem_region(res->start, resource_size(res));
  fail1:        kfree(nuc900_rtc);
@@@ -304,8 -302,8 +304,8 @@@ static int __devexit nuc900_rtc_remove(
        struct nuc900_rtc *nuc900_rtc = platform_get_drvdata(pdev);
        struct resource *res;
  
 -      rtc_device_unregister(nuc900_rtc->rtcdev);
        free_irq(nuc900_rtc->irq_num, nuc900_rtc);
 +      rtc_device_unregister(nuc900_rtc->rtcdev);
        iounmap(nuc900_rtc->rtc_reg);
  
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
diff --combined drivers/s390/char/vmcp.c
index 0e7cb1a841519cdeacedcb40a2eae43d36e71b62,19a14d9b80c14d9f2dd8ffdfeb16d8563369133a..31a3ccbb6495c2e8efcdd34bbd8b3cacfbbf9154
@@@ -47,7 -47,7 +47,7 @@@ static int vmcp_release(struct inode *i
  {
        struct vmcp_session *session;
  
-       session = (struct vmcp_session *)file->private_data;
+       session = file->private_data;
        file->private_data = NULL;
        free_pages((unsigned long)session->response, get_order(session->bufsize));
        kfree(session);
@@@ -94,7 -94,7 +94,7 @@@ vmcp_write(struct file *file, const cha
                return -EFAULT;
        }
        cmd[count] = '\0';
-       session = (struct vmcp_session *)file->private_data;
+       session = file->private_data;
        if (mutex_lock_interruptible(&session->mutex)) {
                kfree(cmd);
                return -ERESTARTSYS;
@@@ -136,7 -136,7 +136,7 @@@ static long vmcp_ioctl(struct file *fil
        int __user *argp;
        int temp;
  
-       session = (struct vmcp_session *)file->private_data;
+       session = file->private_data;
        if (is_compat_task())
                argp = compat_ptr(arg);
        else
@@@ -177,7 -177,6 +177,7 @@@ static const struct file_operations vmc
        .write          = vmcp_write,
        .unlocked_ioctl = vmcp_ioctl,
        .compat_ioctl   = vmcp_ioctl,
 +      .llseek         = no_llseek,
  };
  
  static struct miscdevice vmcp_dev = {
diff --combined drivers/scsi/Kconfig
index 2e9632e2c98b41cdfb6ba156e9dfc8fe5751f25a,85da296a49be6b5f7433523f5b18a9c84823b1b7..8616496ffc026ef24cadc8e943dc6e23e4010722
@@@ -116,7 -116,7 +116,7 @@@ config CHR_DEV_OSS
          <http://www.tldp.org/docs.html#howto>  and
          <file:Documentation/scsi/osst.txt>  in the kernel source.
          More info on the OnStream driver may be found on
-         <http://linux1.onstream.nl/test/>
+         <http://sourceforge.net/projects/osst/>
          Please also have a look at the standard st docu, as most of it
          applies to osst as well.
  
@@@ -156,9 -156,9 +156,9 @@@ config CHR_DEV_S
          directly, so you need some additional software which knows how to
          talk to these devices using the SCSI protocol:
  
-         For scanners, look at SANE (<http://www.mostang.com/sane/>). For CD
+         For scanners, look at SANE (<http://www.sane-project.org/>). For CD
          writer software look at Cdrtools
-         (<http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html>)
+         (<http://cdrecord.berlios.de/private/cdrecord.html>)
          and for burning a "disk at once": CDRDAO
          (<http://cdrdao.sourceforge.net/>). Cdparanoia is a high
          quality digital reader of audio CDs (<http://www.xiph.org/paranoia/>).
@@@ -316,8 -316,7 +316,8 @@@ config SCSI_ISCSI_ATTR
  
  config SCSI_SAS_ATTRS
        tristate "SAS Transport Attributes"
 -      depends on SCSI && BLK_DEV_BSG
 +      depends on SCSI
 +      select BLK_DEV_BSG
        help
          If you wish to export transport-specific information about
          each attached SAS device to sysfs, say Y.
@@@ -371,15 -370,7 +371,15 @@@ config ISCSI_TC
  
         http://open-iscsi.org
  
 -source "drivers/scsi/cxgb3i/Kconfig"
 +config ISCSI_BOOT_SYSFS
 +      tristate "iSCSI Boot Sysfs Interface"
 +      default n
 +      help
 +        This option enables support for exposing iSCSI boot information
 +        via sysfs to userspace. If you wish to export this information,
 +        say Y. Otherwise, say N.
 +
 +source "drivers/scsi/cxgbi/Kconfig"
  source "drivers/scsi/bnx2i/Kconfig"
  source "drivers/scsi/be2iscsi/Kconfig"
  
@@@ -951,6 -942,7 +951,7 @@@ config SCSI_IP
        ---help---
          This is support for the IBM ServeRAID hardware RAID controllers.
          See <http://www.developer.ibm.com/welcome/netfinity/serveraid.html>
+         and <http://www-947.ibm.com/support/entry/portal/docdisplay?brand=5000008&lndocid=SERV-RAID>
          for more information.  If this driver does not work correctly
          without modification please contact the author by email at
          <ipslinux@adaptec.com>.
@@@ -1610,7 -1602,7 +1611,7 @@@ config SCSI_DEBU
          host adapter with one dummy SCSI disk. Each dummy disk uses kernel
          RAM as storage (i.e. it is a ramdisk). To save space when multiple
          dummy disks are simulated, they share the same kernel RAM for 
-         their storage. See <http://www.torque.net/sg/sdebug.html> for more
+         their storage. See <http://sg.danny.cz/sg/sdebug26.html> for more
          information. This driver is primarily of use to those testing the
          SCSI and block subsystems. If unsure, say N.
  
@@@ -1862,7 -1854,7 +1863,7 @@@ config ZFCP_DI
  
  config SCSI_PMCRAID
        tristate "PMC SIERRA Linux MaxRAID adapter support"
 -      depends on PCI && SCSI
 +      depends on PCI && SCSI && NET
        ---help---
          This driver supports the PMC SIERRA MaxRAID adapters.
  
index dae46d779c7b1c03421af3fa665c6d11979ef76e,aa4003699027305d5dba9ef2cbc7ebf783d5c7b5..29c0ed1cf50753ba8b674c1193d97c1af4d31624
@@@ -38,7 -38,7 +38,7 @@@
  #include <linux/moduleparam.h>
  #include <linux/pci.h>
  #include <linux/slab.h>
 -#include <linux/smp_lock.h>
 +#include <linux/mutex.h>
  #include <linux/spinlock.h>
  #include <linux/syscalls.h>
  #include <linux/delay.h>
@@@ -76,7 -76,6 +76,7 @@@ MODULE_DESCRIPTION("Dell PERC2, 2/Si, 3
  MODULE_LICENSE("GPL");
  MODULE_VERSION(AAC_DRIVER_FULL_VERSION);
  
 +static DEFINE_MUTEX(aac_mutex);
  static LIST_HEAD(aac_devices);
  static int aac_cfg_major = -1;
  char aac_driver_version[] = AAC_DRIVER_FULL_VERSION;
@@@ -679,7 -678,7 +679,7 @@@ static int aac_cfg_open(struct inode *i
        unsigned minor_number = iminor(inode);
        int err = -ENODEV;
  
 -      lock_kernel();  /* BKL pushdown: nothing else protects this list */
 +      mutex_lock(&aac_mutex);  /* BKL pushdown: nothing else protects this list */
        list_for_each_entry(aac, &aac_devices, entry) {
                if (aac->id == minor_number) {
                        file->private_data = aac;
                        break;
                }
        }
 -      unlock_kernel();
 +      mutex_unlock(&aac_mutex);
  
        return err;
  }
@@@ -712,9 -711,9 +712,9 @@@ static long aac_cfg_ioctl(struct file *
        int ret;
        if (!capable(CAP_SYS_RAWIO))
                return -EPERM;
 -      lock_kernel();
 +      mutex_lock(&aac_mutex);
        ret = aac_do_ioctl(file->private_data, cmd, (void __user *)arg);
 -      unlock_kernel();
 +      mutex_unlock(&aac_mutex);
  
        return ret;
  }
  static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long arg)
  {
        long ret;
 -      lock_kernel();
 +      mutex_lock(&aac_mutex);
        switch (cmd) {
        case FSACTL_MINIPORT_REV_CHECK:
        case FSACTL_SENDFIB:
                ret = -ENOIOCTLCMD;
                break;
        }
 -      unlock_kernel();
 +      mutex_unlock(&aac_mutex);
        return ret;
  }
  
@@@ -771,7 -770,7 +771,7 @@@ static long aac_compat_cfg_ioctl(struc
  {
        if (!capable(CAP_SYS_RAWIO))
                return -EPERM;
-       return aac_compat_do_ioctl((struct aac_dev *)file->private_data, cmd, arg);
+       return aac_compat_do_ioctl(file->private_data, cmd, arg);
  }
  #endif
  
@@@ -1040,7 -1039,6 +1040,7 @@@ static const struct file_operations aac
        .compat_ioctl   = aac_compat_cfg_ioctl,
  #endif
        .open           = aac_cfg_open,
 +      .llseek         = noop_llseek,
  };
  
  static struct scsi_host_template aac_driver_template = {
index c3d7174e34699e7608ff88abb80e6af9a53a3f4f,b37fa202d1e376e9c8d5d67b9daadf7ea90f70c8..a345dde16c86fcf74b121b38d2e505102b3ee698
@@@ -588,7 -588,7 +588,7 @@@ lpfc_work_done(struct lpfc_hba *phba
                                                        (status &
                                                         HA_RXMASK));
                }
 -              if (pring->txq_cnt)
 +              if ((phba->sli_rev == LPFC_SLI_REV4) && pring->txq_cnt)
                        lpfc_drain_txq(phba);
                /*
                 * Turn on Ring interrupts
@@@ -1015,6 -1015,7 +1015,6 @@@ static voi
  lpfc_mbx_cmpl_reg_fcfi(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
  {
        struct lpfc_vport *vport = mboxq->vport;
 -      unsigned long flags;
  
        if (mboxq->u.mb.mbxStatus) {
                lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
        /* Start FCoE discovery by sending a FLOGI. */
        phba->fcf.fcfi = bf_get(lpfc_reg_fcfi_fcfi, &mboxq->u.mqe.un.reg_fcfi);
        /* Set the FCFI registered flag */
 -      spin_lock_irqsave(&phba->hbalock, flags);
 +      spin_lock_irq(&phba->hbalock);
        phba->fcf.fcf_flag |= FCF_REGISTERED;
 -      spin_unlock_irqrestore(&phba->hbalock, flags);
 +      spin_unlock_irq(&phba->hbalock);
        /* If there is a pending FCoE event, restart FCF table scan. */
        if (lpfc_check_pending_fcoe_event(phba, 1)) {
                mempool_free(mboxq, phba->mbox_mem_pool);
                return;
        }
 -      spin_lock_irqsave(&phba->hbalock, flags);
 +      spin_lock_irq(&phba->hbalock);
        phba->fcf.fcf_flag |= (FCF_SCAN_DONE | FCF_IN_USE);
        phba->hba_flag &= ~FCF_DISC_INPROGRESS;
 -      spin_unlock_irqrestore(&phba->hbalock, flags);
 +      spin_unlock_irq(&phba->hbalock);
        if (vport->port_state != LPFC_FLOGI)
                lpfc_initial_flogi(vport);
  
@@@ -1239,13 -1240,14 +1239,13 @@@ lpfc_register_fcf(struct lpfc_hba *phba
  {
        LPFC_MBOXQ_t *fcf_mbxq;
        int rc;
 -      unsigned long flags;
  
 -      spin_lock_irqsave(&phba->hbalock, flags);
 +      spin_lock_irq(&phba->hbalock);
  
        /* If the FCF is not availabe do nothing. */
        if (!(phba->fcf.fcf_flag & FCF_AVAILABLE)) {
                phba->hba_flag &= ~FCF_DISC_INPROGRESS;
 -              spin_unlock_irqrestore(&phba->hbalock, flags);
 +              spin_unlock_irq(&phba->hbalock);
                return;
        }
  
        if (phba->fcf.fcf_flag & FCF_REGISTERED) {
                phba->fcf.fcf_flag |= (FCF_SCAN_DONE | FCF_IN_USE);
                phba->hba_flag &= ~FCF_DISC_INPROGRESS;
 -              spin_unlock_irqrestore(&phba->hbalock, flags);
 +              spin_unlock_irq(&phba->hbalock);
                if (phba->pport->port_state != LPFC_FLOGI)
                        lpfc_initial_flogi(phba->pport);
                return;
        }
 -      spin_unlock_irqrestore(&phba->hbalock, flags);
 +      spin_unlock_irq(&phba->hbalock);
  
        fcf_mbxq = mempool_alloc(phba->mbox_mem_pool,
                GFP_KERNEL);
        if (!fcf_mbxq) {
 -              spin_lock_irqsave(&phba->hbalock, flags);
 +              spin_lock_irq(&phba->hbalock);
                phba->hba_flag &= ~FCF_DISC_INPROGRESS;
 -              spin_unlock_irqrestore(&phba->hbalock, flags);
 +              spin_unlock_irq(&phba->hbalock);
                return;
        }
  
        fcf_mbxq->mbox_cmpl = lpfc_mbx_cmpl_reg_fcfi;
        rc = lpfc_sli_issue_mbox(phba, fcf_mbxq, MBX_NOWAIT);
        if (rc == MBX_NOT_FINISHED) {
 -              spin_lock_irqsave(&phba->hbalock, flags);
 +              spin_lock_irq(&phba->hbalock);
                phba->hba_flag &= ~FCF_DISC_INPROGRESS;
 -              spin_unlock_irqrestore(&phba->hbalock, flags);
 +              spin_unlock_irq(&phba->hbalock);
                mempool_free(fcf_mbxq, phba->mbox_mem_pool);
        }
  
@@@ -1850,7 -1852,8 +1850,7 @@@ lpfc_mbx_cmpl_fcf_scan_read_fcf_rec(str
                                __lpfc_sli4_stop_fcf_redisc_wait_timer(phba);
                        else if (phba->fcf.fcf_flag & FCF_REDISC_FOV)
                                /* If in fast failover, mark it's completed */
 -                              phba->fcf.fcf_flag &= ~(FCF_REDISC_FOV |
 -                                                      FCF_DISCOVERY);
 +                              phba->fcf.fcf_flag &= ~FCF_REDISC_FOV;
                        spin_unlock_irq(&phba->hbalock);
                        lpfc_printf_log(phba, KERN_INFO, LOG_FIP,
                                        "2836 The new FCF record (x%x) "
@@@ -2648,6 -2651,7 +2648,6 @@@ lpfc_mbx_process_link_up(struct lpfc_hb
                spin_unlock_irq(&phba->hbalock);
                lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY,
                                "2778 Start FCF table scan at linkup\n");
 -
                rc = lpfc_sli4_fcf_scan_read_fcf_rec(phba,
                                                     LPFC_FCOE_FCF_GET_FIRST);
                if (rc) {
                        spin_unlock_irq(&phba->hbalock);
                        goto out;
                }
 +              /* Reset FCF roundrobin bmask for new discovery */
 +              memset(phba->fcf.fcf_rr_bmask, 0,
 +                     sizeof(*phba->fcf.fcf_rr_bmask));
        }
  
        return;
@@@ -2849,7 -2850,6 +2849,7 @@@ lpfc_mbx_cmpl_reg_login(struct lpfc_hb
        struct Scsi_Host  *shost = lpfc_shost_from_vport(vport);
  
        pmb->context1 = NULL;
 +      pmb->context2 = NULL;
  
        if (ndlp->nlp_flag & NLP_REG_LOGIN_SEND)
                ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND;
@@@ -3148,7 -3148,6 +3148,7 @@@ lpfc_mbx_cmpl_fabric_reg_login(struct l
        ndlp = (struct lpfc_nodelist *) pmb->context2;
        pmb->context1 = NULL;
        pmb->context2 = NULL;
 +
        if (mb->mbxStatus) {
                lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX,
                                 "0258 Register Fabric login error: 0x%x\n",
@@@ -3218,9 -3217,6 +3218,9 @@@ lpfc_mbx_cmpl_ns_reg_login(struct lpfc_
        struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *) pmb->context2;
        struct lpfc_vport *vport = pmb->vport;
  
 +      pmb->context1 = NULL;
 +      pmb->context2 = NULL;
 +
        if (mb->mbxStatus) {
  out:
                lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
                return;
        }
  
 -      pmb->context1 = NULL;
 -
        ndlp->nlp_rpi = mb->un.varWords[0];
        ndlp->nlp_flag |= NLP_RPI_VALID;
        ndlp->nlp_type |= NLP_FABRIC;
@@@ -4785,7 -4783,6 +4785,7 @@@ lpfc_mbx_cmpl_fdmi_reg_login(struct lpf
        struct lpfc_vport    *vport = pmb->vport;
  
        pmb->context1 = NULL;
 +      pmb->context2 = NULL;
  
        ndlp->nlp_rpi = mb->un.varWords[0];
        ndlp->nlp_flag |= NLP_RPI_VALID;
@@@ -5100,7 -5097,6 +5100,7 @@@ static voi
  lpfc_unregister_vfi_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
  {
        struct lpfc_vport *vport = mboxq->vport;
 +      struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
  
        if (mboxq->u.mb.mbxStatus) {
                lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY|LOG_MBOX,
                        "HBA state x%x\n",
                        mboxq->u.mb.mbxStatus, vport->port_state);
        }
 +      spin_lock_irq(shost->host_lock);
 +      phba->pport->fc_flag &= ~FC_VFI_REGISTERED;
 +      spin_unlock_irq(shost->host_lock);
        mempool_free(mboxq, phba->mbox_mem_pool);
        return;
  }
@@@ -5292,10 -5285,6 +5292,10 @@@ lpfc_unregister_fcf_rescan(struct lpfc_
        spin_lock_irq(&phba->hbalock);
        phba->fcf.fcf_flag |= FCF_INIT_DISC;
        spin_unlock_irq(&phba->hbalock);
 +
 +      /* Reset FCF roundrobin bmask for new discovery */
 +      memset(phba->fcf.fcf_rr_bmask, 0, sizeof(*phba->fcf.fcf_rr_bmask));
 +
        rc = lpfc_sli4_fcf_scan_read_fcf_rec(phba, LPFC_FCOE_FCF_GET_FIRST);
  
        if (rc) {
@@@ -5509,7 -5498,7 +5509,7 @@@ lpfc_get_rec_conf23(uint8_t *buff, uint
   * @buff: Buffer containing config region 23 data.
   * @size: Size of the data buffer.
   *
-  * This fuction parse the FCoE config parameters in config region 23 and
+  * This function parses the FCoE config parameters in config region 23 and
   * populate driver data structure with the parameters.
   */
  void
diff --combined drivers/scsi/sg.c
index 5428d53f5a133992bef0114b785e2d54ebec1c0c,307aba9f13ab45c54bed94696a69384d61ba8291..909ed9ed24c0fb25663ee09d5ac864628f220843
@@@ -49,7 -49,7 +49,7 @@@ static int sg_version_num = 30534;    /* 
  #include <linux/blkdev.h>
  #include <linux/delay.h>
  #include <linux/blktrace_api.h>
 -#include <linux/smp_lock.h>
 +#include <linux/mutex.h>
  
  #include "scsi.h"
  #include <scsi/scsi_dbg.h>
@@@ -103,8 -103,6 +103,8 @@@ static int scatter_elem_sz_prev = SG_SC
  static int sg_add(struct device *, struct class_interface *);
  static void sg_remove(struct device *, struct class_interface *);
  
 +static DEFINE_MUTEX(sg_mutex);
 +
  static DEFINE_IDR(sg_index_idr);
  static DEFINE_RWLOCK(sg_index_lock);  /* Also used to lock
                                                           file descriptor list for device */
@@@ -212,7 -210,7 +212,7 @@@ static void sg_put_dev(Sg_device *sdp)
  
  static int sg_allow_access(struct file *filp, unsigned char *cmd)
  {
-       struct sg_fd *sfp = (struct sg_fd *)filp->private_data;
+       struct sg_fd *sfp = filp->private_data;
  
        if (sfp->parentdp->device->type == TYPE_SCANNER)
                return 0;
@@@ -231,7 -229,7 +231,7 @@@ sg_open(struct inode *inode, struct fil
        int res;
        int retval;
  
 -      lock_kernel();
 +      mutex_lock(&sg_mutex);
        nonseekable_open(inode, filp);
        SCSI_LOG_TIMEOUT(3, printk("sg_open: dev=%d, flags=0x%x\n", dev, flags));
        sdp = sg_get_dev(dev);
@@@ -316,7 -314,7 +316,7 @@@ sdp_put
  sg_put:
        if (sdp)
                sg_put_dev(sdp);
 -      unlock_kernel();
 +      mutex_unlock(&sg_mutex);
        return retval;
  }
  
@@@ -1094,9 -1092,9 +1094,9 @@@ sg_unlocked_ioctl(struct file *filp, un
  {
        int ret;
  
 -      lock_kernel();
 +      mutex_lock(&sg_mutex);
        ret = sg_ioctl(filp, cmd_in, arg);
 -      unlock_kernel();
 +      mutex_unlock(&sg_mutex);
  
        return ret;
  }
@@@ -1353,7 -1351,6 +1353,7 @@@ static const struct file_operations sg_
        .mmap = sg_mmap,
        .release = sg_release,
        .fasync = sg_fasync,
 +      .llseek = no_llseek,
  };
  
  static struct class *sg_sysfs_class;
@@@ -1660,7 -1657,7 +1660,7 @@@ static int sg_start_req(Sg_request *srp
        if (sg_allow_dio && hp->flags & SG_FLAG_DIRECT_IO &&
            dxfer_dir != SG_DXFER_UNKNOWN && !iov_count &&
            !sfp->parentdp->device->host->unchecked_isa_dma &&
 -          blk_rq_aligned(q, hp->dxferp, dxfer_len))
 +          blk_rq_aligned(q, (unsigned long)hp->dxferp, dxfer_len))
                md = NULL;
        else
                md = &map_data;
                int len, size = sizeof(struct sg_iovec) * iov_count;
                struct iovec *iov;
  
 -              iov = kmalloc(size, GFP_ATOMIC);
 -              if (!iov)
 -                      return -ENOMEM;
 -
 -              if (copy_from_user(iov, hp->dxferp, size)) {
 -                      kfree(iov);
 -                      return -EFAULT;
 -              }
 +              iov = memdup_user(hp->dxferp, size);
 +              if (IS_ERR(iov))
 +                      return PTR_ERR(iov);
  
                len = iov_length(iov, iov_count);
                if (hp->dxfer_len < len) {
diff --combined drivers/serial/8250.c
index 167c4a6ccbc39b276806c5646e8792627f732c9d,131c95f5476aab5caeb59b93b1cb6c8ad1f40789..4d8e14b7aa931bcf3de11c6e5805005e0bf413ca
@@@ -31,7 -31,6 +31,7 @@@
  #include <linux/delay.h>
  #include <linux/platform_device.h>
  #include <linux/tty.h>
 +#include <linux/ratelimit.h>
  #include <linux/tty_flip.h>
  #include <linux/serial_reg.h>
  #include <linux/serial_core.h>
@@@ -155,6 -154,12 +155,6 @@@ struct uart_8250_port 
        unsigned char           lsr_saved_flags;
  #define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA
        unsigned char           msr_saved_flags;
 -
 -      /*
 -       * We provide a per-port pm hook.
 -       */
 -      void                    (*pm)(struct uart_port *port,
 -                                    unsigned int state, unsigned int old);
  };
  
  struct irq_info {
@@@ -919,7 -924,7 +919,7 @@@ static int broken_efr(struct uart_8250_
        /*
         * Exar ST16C2550 "A2" devices incorrectly detect as
         * having an EFR, and report an ID of 0x0201.  See
-        * http://www.exar.com/info.php?pdf=dan180_oct2004.pdf
+        * http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-11/4812.html 
         */
        if (autoconfig_read_divisor_id(up) == 0x0201 && size_fifo(up) == 16)
                return 1;
@@@ -1601,8 -1606,8 +1601,8 @@@ static irqreturn_t serial8250_interrupt
  
                if (l == i->head && pass_counter++ > PASS_LIMIT) {
                        /* If we hit this, we're dead. */
 -                      printk(KERN_ERR "serial8250: too much work for "
 -                              "irq%d\n", irq);
 +                      printk_ratelimited(KERN_ERR
 +                              "serial8250: too much work for irq%d\n", irq);
                        break;
                }
        } while (l != end);
@@@ -1717,6 -1722,12 +1717,6 @@@ static void serial_unlink_irq_chain(str
        mutex_unlock(&hash_mutex);
  }
  
 -/* Base timer interval for polling */
 -static inline int poll_timeout(int timeout)
 -{
 -      return timeout > 6 ? (timeout / 2 - 2) : 1;
 -}
 -
  /*
   * This function is used to handle ports that do not have an
   * interrupt.  This doesn't work very well for 16450's, but gives
@@@ -1731,7 -1742,7 +1731,7 @@@ static void serial8250_timeout(unsigne
        iir = serial_in(up, UART_IIR);
        if (!(iir & UART_IIR_NO_INT))
                serial8250_handle_port(up);
 -      mod_timer(&up->timer, jiffies + poll_timeout(up->port.timeout));
 +      mod_timer(&up->timer, jiffies + uart_poll_timeout(&up->port));
  }
  
  static void serial8250_backup_timeout(unsigned long data)
  
        /* Standard timer interval plus 0.2s to keep the port running */
        mod_timer(&up->timer,
 -              jiffies + poll_timeout(up->port.timeout) + HZ / 5);
 +              jiffies + uart_poll_timeout(&up->port) + HZ / 5);
  }
  
  static unsigned int serial8250_tx_empty(struct uart_port *port)
@@@ -1856,17 -1867,15 +1856,17 @@@ static void wait_for_xmitr(struct uart_
        unsigned int status, tmout = 10000;
  
        /* Wait up to 10ms for the character(s) to be sent. */
 -      do {
 +      for (;;) {
                status = serial_in(up, UART_LSR);
  
                up->lsr_saved_flags |= status & LSR_SAVE_FLAGS;
  
 +              if ((status & bits) == bits)
 +                      break;
                if (--tmout == 0)
                        break;
                udelay(1);
 -      } while ((status & bits) != bits);
 +      }
  
        /* Wait up to 1s for flow control if necessary */
        if (up->port.flags & UPF_CONS_FLOW) {
@@@ -2060,7 -2069,7 +2060,7 @@@ static int serial8250_startup(struct ua
                up->timer.function = serial8250_backup_timeout;
                up->timer.data = (unsigned long)up;
                mod_timer(&up->timer, jiffies +
 -                        poll_timeout(up->port.timeout) + HZ / 5);
 +                      uart_poll_timeout(port) + HZ / 5);
        }
  
        /*
         */
        if (!is_real_interrupt(up->port.irq)) {
                up->timer.data = (unsigned long)up;
 -              mod_timer(&up->timer, jiffies + poll_timeout(up->port.timeout));
 +              mod_timer(&up->timer, jiffies + uart_poll_timeout(port));
        } else {
                retval = serial_link_irq_chain(up);
                if (retval)
@@@ -2431,24 -2440,16 +2431,24 @@@ serial8250_set_ldisc(struct uart_port *
                port->flags &= ~UPF_HARDPPS_CD;
  }
  
 -static void
 -serial8250_pm(struct uart_port *port, unsigned int state,
 -            unsigned int oldstate)
 +
 +void serial8250_do_pm(struct uart_port *port, unsigned int state,
 +                    unsigned int oldstate)
  {
        struct uart_8250_port *p = (struct uart_8250_port *)port;
  
        serial8250_set_sleep(p, state != 0);
 +}
 +EXPORT_SYMBOL(serial8250_do_pm);
  
 -      if (p->pm)
 -              p->pm(port, state, oldstate);
 +static void
 +serial8250_pm(struct uart_port *port, unsigned int state,
 +            unsigned int oldstate)
 +{
 +      if (port->pm)
 +              port->pm(port, state, oldstate);
 +      else
 +              serial8250_do_pm(port, state, oldstate);
  }
  
  static unsigned int serial8250_port_size(struct uart_8250_port *pt)
@@@ -2673,16 -2674,6 +2673,16 @@@ static struct uart_ops serial8250_pops 
  
  static struct uart_8250_port serial8250_ports[UART_NR];
  
 +static void (*serial8250_isa_config)(int port, struct uart_port *up,
 +      unsigned short *capabilities);
 +
 +void serial8250_set_isa_configurator(
 +      void (*v)(int port, struct uart_port *up, unsigned short *capabilities))
 +{
 +      serial8250_isa_config = v;
 +}
 +EXPORT_SYMBOL(serial8250_set_isa_configurator);
 +
  static void __init serial8250_isa_init_ports(void)
  {
        struct uart_8250_port *up;
                up->port.regshift = old_serial_port[i].iomem_reg_shift;
                set_io_from_upio(&up->port);
                up->port.irqflags |= irqflag;
 +              if (serial8250_isa_config != NULL)
 +                      serial8250_isa_config(i, &up->port, &up->capabilities);
 +
        }
  }
  
@@@ -3022,7 -3010,6 +3022,7 @@@ static int __devinit serial8250_probe(s
                port.serial_in          = p->serial_in;
                port.serial_out         = p->serial_out;
                port.set_termios        = p->set_termios;
 +              port.pm                 = p->pm;
                port.dev                = &dev->dev;
                port.irqflags           |= irqflag;
                ret = serial8250_register_port(&port);
@@@ -3189,12 -3176,6 +3189,12 @@@ int serial8250_register_port(struct uar
                /*  Possibly override set_termios call */
                if (port->set_termios)
                        uart->port.set_termios = port->set_termios;
 +              if (port->pm)
 +                      uart->port.pm = port->pm;
 +
 +              if (serial8250_isa_config != NULL)
 +                      serial8250_isa_config(0, &uart->port,
 +                                      &uart->capabilities);
  
                ret = uart_add_one_port(&serial8250_reg, &uart->port);
                if (ret == 0)
index 6f1b51e231e4d57305877f1e1f57bef5bc088834,81987a7b9aa32add8212f5f451cc0f2f3a7c6b7e..e95c524d9d18839f552c03cf1ba060de0b84631e
@@@ -10,7 -10,7 +10,7 @@@
  
  /*
   * This driver and the hardware supported are in term of EE-191 of ADI.
-  * http://www.analog.com/UploadedFiles/Application_Notes/399447663EE191.pdf
+  * http://www.analog.com/static/imported-files/application_notes/EE191.pdf 
   * This application note describe how to implement a UART on a Sharc DSP,
   * but this driver is implemented on Blackfin Processor.
   * Transmit Frame Sync is not used by this driver to transfer data out.
@@@ -121,7 -121,7 +121,7 @@@ static int sport_uart_setup(struct spor
        unsigned int sclk = get_sclk();
  
        /* Set TCR1 and TCR2, TFSR is not enabled for uart */
 -      SPORT_PUT_TCR1(up, (ITFS | TLSBIT | ITCLK));
 +      SPORT_PUT_TCR1(up, (LATFS | ITFS | TFSR | TLSBIT | ITCLK));
        SPORT_PUT_TCR2(up, size + 1);
        pr_debug("%s TCR1:%x, TCR2:%x\n", __func__, SPORT_GET_TCR1(up), SPORT_GET_TCR2(up));
  
        pr_debug("%s RCR1:%x, RCR2:%x\n", __func__, SPORT_GET_RCR1(up), SPORT_GET_RCR2(up));
  
        tclkdiv = sclk / (2 * baud_rate) - 1;
 -      rclkdiv = sclk / (2 * baud_rate * 2) - 1;
 +      /* The actual uart baud rate of devices vary between +/-2%. The sport
 +       * RX sample rate should be faster than the double of the worst case,
 +       * otherwise, wrong data are received. So, set sport RX clock to be
 +       * 3% faster.
 +       */
 +      rclkdiv = sclk / (2 * baud_rate * 2 * 97 / 100) - 1;
        SPORT_PUT_TCLKDIV(up, tclkdiv);
        SPORT_PUT_RCLKDIV(up, rclkdiv);
        SSYNC();
index c4bf54bb3fc7b6dd45e2a0100c80219545a05b26,c761b2223129af9ea80107ade2580fd2793524ba..d2fce865b73180a70e9e3d3bf7435dc07b79fcc7
@@@ -44,7 -44,7 +44,7 @@@ MODULE_DEVICE_TABLE(of, ulite_of_match)
   * Register definitions
   *
   * For register details see datasheet:
-  * http://www.xilinx.com/bvdocs/ipcenter/data_sheet/opb_uartlite.pdf
+  * http://www.xilinx.com/support/documentation/ip_documentation/opb_uartlite.pdf 
   */
  
  #define ULITE_RX              0x00
@@@ -322,26 -322,6 +322,26 @@@ static int ulite_verify_port(struct uar
        return -EINVAL;
  }
  
 +#ifdef CONFIG_CONSOLE_POLL
 +static int ulite_get_poll_char(struct uart_port *port)
 +{
 +      if (!(ioread32be(port->membase + ULITE_STATUS)
 +                                              & ULITE_STATUS_RXVALID))
 +              return NO_POLL_CHAR;
 +
 +      return ioread32be(port->membase + ULITE_RX);
 +}
 +
 +static void ulite_put_poll_char(struct uart_port *port, unsigned char ch)
 +{
 +      while (ioread32be(port->membase + ULITE_STATUS) & ULITE_STATUS_TXFULL)
 +              cpu_relax();
 +
 +      /* write char to device */
 +      iowrite32be(ch, port->membase + ULITE_TX);
 +}
 +#endif
 +
  static struct uart_ops ulite_ops = {
        .tx_empty       = ulite_tx_empty,
        .set_mctrl      = ulite_set_mctrl,
        .release_port   = ulite_release_port,
        .request_port   = ulite_request_port,
        .config_port    = ulite_config_port,
 -      .verify_port    = ulite_verify_port
 +      .verify_port    = ulite_verify_port,
 +#ifdef CONFIG_CONSOLE_POLL
 +      .poll_get_char  = ulite_get_poll_char,
 +      .poll_put_char  = ulite_put_poll_char,
 +#endif
  };
  
  /* ---------------------------------------------------------------------
@@@ -608,7 -584,7 +608,7 @@@ static struct platform_driver ulite_pla
   */
  #if defined(CONFIG_OF) && (defined(CONFIG_PPC32) || defined(CONFIG_MICROBLAZE))
  static int __devinit
 -ulite_of_probe(struct of_device *op, const struct of_device_id *match)
 +ulite_of_probe(struct platform_device *op, const struct of_device_id *match)
  {
        struct resource res;
        const unsigned int *id;
        return ulite_assign(&op->dev, id ? *id : -1, res.start, irq);
  }
  
 -static int __devexit ulite_of_remove(struct of_device *op)
 +static int __devexit ulite_of_remove(struct platform_device *op)
  {
        return ulite_release(&op->dev);
  }
index 387e503b9d14a1dc9fac7627bcbbf6f17d8c3637,d90c9e89688e2bfd5fe5782f760c8958dc9aac7f..bdec36acd0fa47373a4e32f046256284af045bdc
@@@ -1266,7 -1266,6 +1266,6 @@@ write_in
        csr |= AT91_UDP_TXPKTRDY;
        __raw_writel(csr, creg);
        udc->req_pending = 0;
-       return;
  }
  
  static void handle_ep0(struct at91_udc *udc)
@@@ -1628,8 -1627,7 +1627,8 @@@ static void at91_vbus_timer(unsigned lo
                schedule_work(&udc->vbus_timer_work);
  }
  
 -int usb_gadget_register_driver (struct usb_gadget_driver *driver)
 +int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
 +              int (*bind)(struct usb_gadget *))
  {
        struct at91_udc *udc = &controller;
        int             retval;
  
        if (!driver
                        || driver->speed < USB_SPEED_FULL
 -                      || !driver->bind
 +                      || !bind
                        || !driver->setup) {
                DBG("bad parameter.\n");
                return -EINVAL;
        udc->enabled = 1;
        udc->selfpowered = 1;
  
 -      retval = driver->bind(&udc->gadget);
 +      retval = bind(&udc->gadget);
        if (retval) {
 -              DBG("driver->bind() returned %d\n", retval);
 +              DBG("bind() returned %d\n", retval);
                udc->driver = NULL;
                udc->gadget.dev.driver = NULL;
                dev_set_drvdata(&udc->gadget.dev, NULL);
        DBG("bound to %s\n", driver->driver.name);
        return 0;
  }
 -EXPORT_SYMBOL (usb_gadget_register_driver);
 +EXPORT_SYMBOL(usb_gadget_probe_driver);
  
  int usb_gadget_unregister_driver (struct usb_gadget_driver *driver)
  {
index 2b98bd26364b45f6edda06d5582540b151af934e,111b85ca7ac0971d8edc029aa8e5e5d53cac1656..4f891eddd06041886b664d54f7488d9b00fcf781
@@@ -318,8 -318,6 +318,6 @@@ static void hidg_set_report_complete(st
        spin_unlock(&hidg->spinlock);
  
        wake_up(&hidg->read_queue);
-       return;
  }
  
  static int hidg_setup(struct usb_function *f,
@@@ -413,8 -411,6 +411,6 @@@ static void hidg_disable(struct usb_fun
  
        usb_ep_disable(hidg->in_ep);
        hidg->in_ep->driver_data = NULL;
-       return;
  }
  
  static int hidg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
@@@ -451,7 -447,6 +447,7 @@@ const struct file_operations f_hidg_fop
        .write          = f_hidg_write,
        .read           = f_hidg_read,
        .poll           = f_hidg_poll,
 +      .llseek         = noop_llseek,
  };
  
  static int __init hidg_bind(struct usb_configuration *c, struct usb_function *f)
index c16b402a876b6008357cd0852b11d2c79af34b2b,d933e6398412aa4a0af68c3465c67c9559df4d84..4c55eda4bd200ab7cb81b53df76cb9dcb351286c
@@@ -287,8 -287,6 +287,6 @@@ static void dr_controller_run(struct fs
        temp = fsl_readl(&dr_regs->usbcmd);
        temp |= USB_CMD_RUN_STOP;
        fsl_writel(temp, &dr_regs->usbcmd);
-       return;
  }
  
  static void dr_controller_stop(struct fsl_udc *udc)
        tmp = fsl_readl(&dr_regs->usbcmd);
        tmp &= ~USB_CMD_RUN_STOP;
        fsl_writel(tmp, &dr_regs->usbcmd);
-       return;
  }
  
  static void dr_ep_setup(unsigned char ep_num, unsigned char dir,
@@@ -416,8 -412,6 +412,6 @@@ static void struct_ep_qh_setup(struct f
        p_QH->max_pkt_length = cpu_to_le32(tmp);
        p_QH->next_dtd_ptr = 1;
        p_QH->size_ioc_int_sts = 0;
-       return;
  }
  
  /* Setup qh structure and ep register for ep0. */
@@@ -1765,8 -1759,7 +1759,8 @@@ static irqreturn_t fsl_udc_irq(int irq
   * Hook to gadget drivers
   * Called by initialization code of gadget drivers
  *----------------------------------------------------------------*/
 -int usb_gadget_register_driver(struct usb_gadget_driver *driver)
 +int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
 +              int (*bind)(struct usb_gadget *))
  {
        int retval = -ENODEV;
        unsigned long flags = 0;
  
        if (!driver || (driver->speed != USB_SPEED_FULL
                                && driver->speed != USB_SPEED_HIGH)
 -                      || !driver->bind || !driver->disconnect
 -                      || !driver->setup)
 +                      || !bind || !driver->disconnect || !driver->setup)
                return -EINVAL;
  
        if (udc_controller->driver)
        spin_unlock_irqrestore(&udc_controller->lock, flags);
  
        /* bind udc driver to gadget driver */
 -      retval = driver->bind(&udc_controller->gadget);
 +      retval = bind(&udc_controller->gadget);
        if (retval) {
                VDBG("bind to %s --> %d", driver->driver.name, retval);
                udc_controller->gadget.dev.driver = NULL;
@@@ -1814,7 -1808,7 +1808,7 @@@ out
                       retval);
        return retval;
  }
 -EXPORT_SYMBOL(usb_gadget_register_driver);
 +EXPORT_SYMBOL(usb_gadget_probe_driver);
  
  /* Disconnect from gadget driver */
  int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
index 027d66f816209d0b8f5638754118c083880eafb8,98dfa181449fbcaa5614b474bfa19f763f4ca229..2efd6732d1308fe8a2a9b92808995ad8eb7fb126
@@@ -1394,8 -1394,6 +1394,6 @@@ static void pxa_ep_fifo_flush(struct us
        }
  
        spin_unlock_irqrestore(&ep->lock, flags);
-       return;
  }
  
  /**
@@@ -1792,9 -1790,8 +1790,9 @@@ static void udc_enable(struct pxa_udc *
  }
  
  /**
 - * usb_gadget_register_driver - Register gadget driver
 + * usb_gadget_probe_driver - Register gadget driver
   * @driver: gadget driver
 + * @bind: bind function
   *
   * When a driver is successfully registered, it will receive control requests
   * including set_configuration(), which enables non-control requests.  Then
   *
   * Returns 0 if no error, -EINVAL, -ENODEV, -EBUSY otherwise
   */
 -int usb_gadget_register_driver(struct usb_gadget_driver *driver)
 +int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
 +              int (*bind)(struct usb_gadget *))
  {
        struct pxa_udc *udc = the_controller;
        int retval;
  
 -      if (!driver || driver->speed < USB_SPEED_FULL || !driver->bind
 +      if (!driver || driver->speed < USB_SPEED_FULL || !bind
                        || !driver->disconnect || !driver->setup)
                return -EINVAL;
        if (!udc)
                dev_err(udc->dev, "device_add error %d\n", retval);
                goto add_fail;
        }
 -      retval = driver->bind(&udc->gadget);
 +      retval = bind(&udc->gadget);
        if (retval) {
                dev_err(udc->dev, "bind to driver %s --> error %d\n",
                        driver->driver.name, retval);
@@@ -1861,7 -1857,7 +1859,7 @@@ add_fail
        udc->gadget.dev.driver = NULL;
        return retval;
  }
 -EXPORT_SYMBOL(usb_gadget_register_driver);
 +EXPORT_SYMBOL(usb_gadget_probe_driver);
  
  
  /**
index 5b314041dfa9d35fbfad3b928dc4305ea4818232,eb61ab4b302cf7aea2f020ee4ba979454746fa47..d3cdffea9c8a33e71dd8fb5bacaf41c7aaf240cd
@@@ -61,17 -61,17 +61,17 @@@ MODULE_PARM_DESC (rndis_debug, "enable 
  #define RNDIS_MAX_CONFIGS     1
  
  
 -static rndis_params rndis_per_dev_params [RNDIS_MAX_CONFIGS];
 +static rndis_params rndis_per_dev_params[RNDIS_MAX_CONFIGS];
  
  /* Driver Version */
 -static const __le32 rndis_driver_version = cpu_to_le32 (1);
 +static const __le32 rndis_driver_version = cpu_to_le32(1);
  
  /* Function Prototypes */
 -static rndis_resp_t *rndis_add_response (int configNr, u32 length);
 +static rndis_resp_t *rndis_add_response(int configNr, u32 length);
  
  
  /* supported OIDs */
 -static const u32 oid_supported_list [] =
 +static const u32 oid_supported_list[] =
  {
        /* the general stuff */
        OID_GEN_SUPPORTED_LIST,
  
  
  /* NDIS Functions */
 -static int
 -gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
 -              rndis_resp_t *r)
 +static int gen_ndis_query_resp(int configNr, u32 OID, u8 *buf,
 +                             unsigned buf_len, rndis_resp_t *r)
  {
 -      int                     retval = -ENOTSUPP;
 -      u32                     length = 4;     /* usually */
 -      __le32                  *outbuf;
 -      int                     i, count;
 -      rndis_query_cmplt_type  *resp;
 -      struct net_device       *net;
 +      int retval = -ENOTSUPP;
 +      u32 length = 4; /* usually */
 +      __le32 *outbuf;
 +      int i, count;
 +      rndis_query_cmplt_type *resp;
 +      struct net_device *net;
        struct rtnl_link_stats64 temp;
        const struct rtnl_link_stats64 *stats;
  
        if (!r) return -ENOMEM;
 -      resp = (rndis_query_cmplt_type *) r->buf;
 +      resp = (rndis_query_cmplt_type *)r->buf;
  
        if (!resp) return -ENOMEM;
  
        }
  
        /* response goes here, right after the header */
 -      outbuf = (__le32 *) &resp[1];
 -      resp->InformationBufferOffset = cpu_to_le32 (16);
 +      outbuf = (__le32 *)&resp[1];
 +      resp->InformationBufferOffset = cpu_to_le32(16);
  
        net = rndis_per_dev_params[configNr].dev;
        stats = dev_get_stats(net, &temp);
        /* mandatory */
        case OID_GEN_SUPPORTED_LIST:
                pr_debug("%s: OID_GEN_SUPPORTED_LIST\n", __func__);
 -              length = sizeof (oid_supported_list);
 -              count  = length / sizeof (u32);
 +              length = sizeof(oid_supported_list);
 +              count  = length / sizeof(u32);
                for (i = 0; i < count; i++)
 -                      outbuf[i] = cpu_to_le32 (oid_supported_list[i]);
 +                      outbuf[i] = cpu_to_le32(oid_supported_list[i]);
                retval = 0;
                break;
  
                 * reddite ergo quae sunt Caesaris Caesari
                 * et quae sunt Dei Deo!
                 */
 -              *outbuf = cpu_to_le32 (0);
 +              *outbuf = cpu_to_le32(0);
                retval = 0;
                break;
  
        /* mandatory */
        case OID_GEN_MEDIA_SUPPORTED:
                pr_debug("%s: OID_GEN_MEDIA_SUPPORTED\n", __func__);
 -              *outbuf = cpu_to_le32 (rndis_per_dev_params [configNr].medium);
 +              *outbuf = cpu_to_le32(rndis_per_dev_params[configNr].medium);
                retval = 0;
                break;
  
        case OID_GEN_MEDIA_IN_USE:
                pr_debug("%s: OID_GEN_MEDIA_IN_USE\n", __func__);
                /* one medium, one transport... (maybe you do it better) */
 -              *outbuf = cpu_to_le32 (rndis_per_dev_params [configNr].medium);
 +              *outbuf = cpu_to_le32(rndis_per_dev_params[configNr].medium);
                retval = 0;
                break;
  
        /* mandatory */
        case OID_GEN_MAXIMUM_FRAME_SIZE:
                pr_debug("%s: OID_GEN_MAXIMUM_FRAME_SIZE\n", __func__);
 -              if (rndis_per_dev_params [configNr].dev) {
 -                      *outbuf = cpu_to_le32 (
 -                              rndis_per_dev_params [configNr].dev->mtu);
 +              if (rndis_per_dev_params[configNr].dev) {
 +                      *outbuf = cpu_to_le32(
 +                              rndis_per_dev_params[configNr].dev->mtu);
                        retval = 0;
                }
                break;
        case OID_GEN_LINK_SPEED:
                if (rndis_debug > 1)
                        pr_debug("%s: OID_GEN_LINK_SPEED\n", __func__);
 -              if (rndis_per_dev_params [configNr].media_state
 +              if (rndis_per_dev_params[configNr].media_state
                                == NDIS_MEDIA_STATE_DISCONNECTED)
 -                      *outbuf = cpu_to_le32 (0);
 +                      *outbuf = cpu_to_le32(0);
                else
 -                      *outbuf = cpu_to_le32 (
 -                              rndis_per_dev_params [configNr].speed);
 +                      *outbuf = cpu_to_le32(
 +                              rndis_per_dev_params[configNr].speed);
                retval = 0;
                break;
  
        /* mandatory */
        case OID_GEN_TRANSMIT_BLOCK_SIZE:
                pr_debug("%s: OID_GEN_TRANSMIT_BLOCK_SIZE\n", __func__);
 -              if (rndis_per_dev_params [configNr].dev) {
 -                      *outbuf = cpu_to_le32 (
 -                              rndis_per_dev_params [configNr].dev->mtu);
 +              if (rndis_per_dev_params[configNr].dev) {
 +                      *outbuf = cpu_to_le32(
 +                              rndis_per_dev_params[configNr].dev->mtu);
                        retval = 0;
                }
                break;
        /* mandatory */
        case OID_GEN_RECEIVE_BLOCK_SIZE:
                pr_debug("%s: OID_GEN_RECEIVE_BLOCK_SIZE\n", __func__);
 -              if (rndis_per_dev_params [configNr].dev) {
 -                      *outbuf = cpu_to_le32 (
 -                              rndis_per_dev_params [configNr].dev->mtu);
 +              if (rndis_per_dev_params[configNr].dev) {
 +                      *outbuf = cpu_to_le32(
 +                              rndis_per_dev_params[configNr].dev->mtu);
                        retval = 0;
                }
                break;
        /* mandatory */
        case OID_GEN_VENDOR_ID:
                pr_debug("%s: OID_GEN_VENDOR_ID\n", __func__);
 -              *outbuf = cpu_to_le32 (
 -                      rndis_per_dev_params [configNr].vendorID);
 +              *outbuf = cpu_to_le32(
 +                      rndis_per_dev_params[configNr].vendorID);
                retval = 0;
                break;
  
        /* mandatory */
        case OID_GEN_VENDOR_DESCRIPTION:
                pr_debug("%s: OID_GEN_VENDOR_DESCRIPTION\n", __func__);
 -              length = strlen (rndis_per_dev_params [configNr].vendorDescr);
 -              memcpy (outbuf,
 -                      rndis_per_dev_params [configNr].vendorDescr, length);
 +              if (rndis_per_dev_params[configNr].vendorDescr) {
 +                      length = strlen(rndis_per_dev_params[configNr].
 +                                      vendorDescr);
 +                      memcpy(outbuf,
 +                              rndis_per_dev_params[configNr].vendorDescr,
 +                              length);
 +              } else {
 +                      outbuf[0] = 0;
 +              }
                retval = 0;
                break;
  
        /* mandatory */
        case OID_GEN_CURRENT_PACKET_FILTER:
                pr_debug("%s: OID_GEN_CURRENT_PACKET_FILTER\n", __func__);
 -              *outbuf = cpu_to_le32 (*rndis_per_dev_params[configNr].filter);
 +              *outbuf = cpu_to_le32(*rndis_per_dev_params[configNr].filter);
                retval = 0;
                break;
  
        case OID_GEN_MEDIA_CONNECT_STATUS:
                if (rndis_debug > 1)
                        pr_debug("%s: OID_GEN_MEDIA_CONNECT_STATUS\n", __func__);
 -              *outbuf = cpu_to_le32 (rndis_per_dev_params [configNr]
 +              *outbuf = cpu_to_le32(rndis_per_dev_params[configNr]
                                                .media_state);
                retval = 0;
                break;
  
        case OID_GEN_PHYSICAL_MEDIUM:
                pr_debug("%s: OID_GEN_PHYSICAL_MEDIUM\n", __func__);
 -              *outbuf = cpu_to_le32 (0);
 +              *outbuf = cpu_to_le32(0);
                retval = 0;
                break;
  
        /* mandatory */
        case OID_802_3_PERMANENT_ADDRESS:
                pr_debug("%s: OID_802_3_PERMANENT_ADDRESS\n", __func__);
 -              if (rndis_per_dev_params [configNr].dev) {
 +              if (rndis_per_dev_params[configNr].dev) {
                        length = ETH_ALEN;
 -                      memcpy (outbuf,
 -                              rndis_per_dev_params [configNr].host_mac,
 +                      memcpy(outbuf,
 +                              rndis_per_dev_params[configNr].host_mac,
                                length);
                        retval = 0;
                }
        /* mandatory */
        case OID_802_3_CURRENT_ADDRESS:
                pr_debug("%s: OID_802_3_CURRENT_ADDRESS\n", __func__);
 -              if (rndis_per_dev_params [configNr].dev) {
 +              if (rndis_per_dev_params[configNr].dev) {
                        length = ETH_ALEN;
 -                      memcpy (outbuf,
 +                      memcpy(outbuf,
                                rndis_per_dev_params [configNr].host_mac,
                                length);
                        retval = 0;
        case OID_802_3_MULTICAST_LIST:
                pr_debug("%s: OID_802_3_MULTICAST_LIST\n", __func__);
                /* Multicast base address only */
 -              *outbuf = cpu_to_le32 (0xE0000000);
 +              *outbuf = cpu_to_le32(0xE0000000);
                retval = 0;
                break;
  
        case OID_802_3_MAXIMUM_LIST_SIZE:
                pr_debug("%s: OID_802_3_MAXIMUM_LIST_SIZE\n", __func__);
                /* Multicast base address only */
 -              *outbuf = cpu_to_le32 (1);
 +              *outbuf = cpu_to_le32(1);
                retval = 0;
                break;
  
        /* mandatory */
        case OID_802_3_XMIT_ONE_COLLISION:
                pr_debug("%s: OID_802_3_XMIT_ONE_COLLISION\n", __func__);
 -              *outbuf = cpu_to_le32 (0);
 +              *outbuf = cpu_to_le32(0);
                retval = 0;
                break;
  
        /* mandatory */
        case OID_802_3_XMIT_MORE_COLLISIONS:
                pr_debug("%s: OID_802_3_XMIT_MORE_COLLISIONS\n", __func__);
 -              *outbuf = cpu_to_le32 (0);
 +              *outbuf = cpu_to_le32(0);
                retval = 0;
                break;
  
        if (retval < 0)
                length = 0;
  
 -      resp->InformationBufferLength = cpu_to_le32 (length);
 -      r->length = length + sizeof *resp;
 -      resp->MessageLength = cpu_to_le32 (r->length);
 +      resp->InformationBufferLength = cpu_to_le32(length);
 +      r->length = length + sizeof(*resp);
 +      resp->MessageLength = cpu_to_le32(r->length);
        return retval;
  }
  
 -static int gen_ndis_set_resp (u8 configNr, u32 OID, u8 *buf, u32 buf_len,
 -                      rndis_resp_t *r)
 +static int gen_ndis_set_resp(u8 configNr, u32 OID, u8 *buf, u32 buf_len,
 +                           rndis_resp_t *r)
  {
 -      rndis_set_cmplt_type            *resp;
 -      int                             i, retval = -ENOTSUPP;
 -      struct rndis_params             *params;
 +      rndis_set_cmplt_type *resp;
 +      int i, retval = -ENOTSUPP;
 +      struct rndis_params *params;
  
        if (!r)
                return -ENOMEM;
 -      resp = (rndis_set_cmplt_type *) r->buf;
 +      resp = (rndis_set_cmplt_type *)r->buf;
        if (!resp)
                return -ENOMEM;
  
                }
        }
  
 -      params = &rndis_per_dev_params [configNr];
 +      params = &rndis_per_dev_params[configNr];
        switch (OID) {
        case OID_GEN_CURRENT_PACKET_FILTER:
  
                        params->state = RNDIS_DATA_INITIALIZED;
                        netif_carrier_on(params->dev);
                        if (netif_running(params->dev))
 -                              netif_wake_queue (params->dev);
 +                              netif_wake_queue(params->dev);
                } else {
                        params->state = RNDIS_INITIALIZED;
 -                      netif_carrier_off (params->dev);
 -                      netif_stop_queue (params->dev);
 +                      netif_carrier_off(params->dev);
 +                      netif_stop_queue(params->dev);
                }
                break;
  
   * Response Functions
   */
  
 -static int rndis_init_response (int configNr, rndis_init_msg_type *buf)
 +static int rndis_init_response(int configNr, rndis_init_msg_type *buf)
  {
 -      rndis_init_cmplt_type   *resp;
 -      rndis_resp_t            *r;
 -      struct rndis_params     *params = rndis_per_dev_params + configNr;
 +      rndis_init_cmplt_type *resp;
 +      rndis_resp_t *r;
 +      struct rndis_params *params = rndis_per_dev_params + configNr;
  
        if (!params->dev)
                return -ENOTSUPP;
  
 -      r = rndis_add_response (configNr, sizeof (rndis_init_cmplt_type));
 +      r = rndis_add_response(configNr, sizeof(rndis_init_cmplt_type));
        if (!r)
                return -ENOMEM;
 -      resp = (rndis_init_cmplt_type *) r->buf;
 +      resp = (rndis_init_cmplt_type *)r->buf;
  
 -      resp->MessageType = cpu_to_le32 (
 -                      REMOTE_NDIS_INITIALIZE_CMPLT);
 -      resp->MessageLength = cpu_to_le32 (52);
 +      resp->MessageType = cpu_to_le32(REMOTE_NDIS_INITIALIZE_CMPLT);
 +      resp->MessageLength = cpu_to_le32(52);
        resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
 -      resp->Status = cpu_to_le32 (RNDIS_STATUS_SUCCESS);
 -      resp->MajorVersion = cpu_to_le32 (RNDIS_MAJOR_VERSION);
 -      resp->MinorVersion = cpu_to_le32 (RNDIS_MINOR_VERSION);
 -      resp->DeviceFlags = cpu_to_le32 (RNDIS_DF_CONNECTIONLESS);
 -      resp->Medium = cpu_to_le32 (RNDIS_MEDIUM_802_3);
 -      resp->MaxPacketsPerTransfer = cpu_to_le32 (1);
 -      resp->MaxTransferSize = cpu_to_le32 (
 +      resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
 +      resp->MajorVersion = cpu_to_le32(RNDIS_MAJOR_VERSION);
 +      resp->MinorVersion = cpu_to_le32(RNDIS_MINOR_VERSION);
 +      resp->DeviceFlags = cpu_to_le32(RNDIS_DF_CONNECTIONLESS);
 +      resp->Medium = cpu_to_le32(RNDIS_MEDIUM_802_3);
 +      resp->MaxPacketsPerTransfer = cpu_to_le32(1);
 +      resp->MaxTransferSize = cpu_to_le32(
                  params->dev->mtu
 -              + sizeof (struct ethhdr)
 -              + sizeof (struct rndis_packet_msg_type)
 +              + sizeof(struct ethhdr)
 +              + sizeof(struct rndis_packet_msg_type)
                + 22);
 -      resp->PacketAlignmentFactor = cpu_to_le32 (0);
 -      resp->AFListOffset = cpu_to_le32 (0);
 -      resp->AFListSize = cpu_to_le32 (0);
 +      resp->PacketAlignmentFactor = cpu_to_le32(0);
 +      resp->AFListOffset = cpu_to_le32(0);
 +      resp->AFListSize = cpu_to_le32(0);
  
        params->resp_avail(params->v);
        return 0;
  }
  
 -static int rndis_query_response (int configNr, rndis_query_msg_type *buf)
 +static int rndis_query_response(int configNr, rndis_query_msg_type *buf)
  {
        rndis_query_cmplt_type *resp;
 -      rndis_resp_t            *r;
 -      struct rndis_params     *params = rndis_per_dev_params + configNr;
 +      rndis_resp_t *r;
 +      struct rndis_params *params = rndis_per_dev_params + configNr;
  
        /* pr_debug("%s: OID = %08X\n", __func__, cpu_to_le32(buf->OID)); */
        if (!params->dev)
         * rndis_query_cmplt_type followed by data.
         * oid_supported_list is the largest data reply
         */
 -      r = rndis_add_response (configNr,
 -              sizeof (oid_supported_list) + sizeof(rndis_query_cmplt_type));
 +      r = rndis_add_response(configNr,
 +              sizeof(oid_supported_list) + sizeof(rndis_query_cmplt_type));
        if (!r)
                return -ENOMEM;
 -      resp = (rndis_query_cmplt_type *) r->buf;
 +      resp = (rndis_query_cmplt_type *)r->buf;
  
 -      resp->MessageType = cpu_to_le32 (REMOTE_NDIS_QUERY_CMPLT);
 +      resp->MessageType = cpu_to_le32(REMOTE_NDIS_QUERY_CMPLT);
        resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
  
 -      if (gen_ndis_query_resp (configNr, le32_to_cpu (buf->OID),
 +      if (gen_ndis_query_resp(configNr, le32_to_cpu(buf->OID),
                        le32_to_cpu(buf->InformationBufferOffset)
 -                                      + 8 + (u8 *) buf,
 +                                      + 8 + (u8 *)buf,
                        le32_to_cpu(buf->InformationBufferLength),
                        r)) {
                /* OID not supported */
 -              resp->Status = cpu_to_le32 (
 -                              RNDIS_STATUS_NOT_SUPPORTED);
 -              resp->MessageLength = cpu_to_le32 (sizeof *resp);
 -              resp->InformationBufferLength = cpu_to_le32 (0);
 -              resp->InformationBufferOffset = cpu_to_le32 (0);
 +              resp->Status = cpu_to_le32(RNDIS_STATUS_NOT_SUPPORTED);
 +              resp->MessageLength = cpu_to_le32(sizeof *resp);
 +              resp->InformationBufferLength = cpu_to_le32(0);
 +              resp->InformationBufferOffset = cpu_to_le32(0);
        } else
 -              resp->Status = cpu_to_le32 (RNDIS_STATUS_SUCCESS);
 +              resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
  
        params->resp_avail(params->v);
        return 0;
  }
  
 -static int rndis_set_response (int configNr, rndis_set_msg_type *buf)
 +static int rndis_set_response(int configNr, rndis_set_msg_type *buf)
  {
 -      u32                     BufLength, BufOffset;
 -      rndis_set_cmplt_type    *resp;
 -      rndis_resp_t            *r;
 -      struct rndis_params     *params = rndis_per_dev_params + configNr;
 +      u32 BufLength, BufOffset;
 +      rndis_set_cmplt_type *resp;
 +      rndis_resp_t *r;
 +      struct rndis_params *params = rndis_per_dev_params + configNr;
  
 -      r = rndis_add_response (configNr, sizeof (rndis_set_cmplt_type));
 +      r = rndis_add_response(configNr, sizeof(rndis_set_cmplt_type));
        if (!r)
                return -ENOMEM;
 -      resp = (rndis_set_cmplt_type *) r->buf;
 +      resp = (rndis_set_cmplt_type *)r->buf;
  
 -      BufLength = le32_to_cpu (buf->InformationBufferLength);
 -      BufOffset = le32_to_cpu (buf->InformationBufferOffset);
 +      BufLength = le32_to_cpu(buf->InformationBufferLength);
 +      BufOffset = le32_to_cpu(buf->InformationBufferOffset);
  
  #ifdef        VERBOSE_DEBUG
        pr_debug("%s: Length: %d\n", __func__, BufLength);
        pr_debug("\n");
  #endif
  
 -      resp->MessageType = cpu_to_le32 (REMOTE_NDIS_SET_CMPLT);
 -      resp->MessageLength = cpu_to_le32 (16);
 +      resp->MessageType = cpu_to_le32(REMOTE_NDIS_SET_CMPLT);
 +      resp->MessageLength = cpu_to_le32(16);
        resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
 -      if (gen_ndis_set_resp (configNr, le32_to_cpu (buf->OID),
 -                      ((u8 *) buf) + 8 + BufOffset, BufLength, r))
 -              resp->Status = cpu_to_le32 (RNDIS_STATUS_NOT_SUPPORTED);
 +      if (gen_ndis_set_resp(configNr, le32_to_cpu(buf->OID),
 +                      ((u8 *)buf) + 8 + BufOffset, BufLength, r))
 +              resp->Status = cpu_to_le32(RNDIS_STATUS_NOT_SUPPORTED);
        else
 -              resp->Status = cpu_to_le32 (RNDIS_STATUS_SUCCESS);
 +              resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
  
        params->resp_avail(params->v);
        return 0;
  }
  
 -static int rndis_reset_response (int configNr, rndis_reset_msg_type *buf)
 +static int rndis_reset_response(int configNr, rndis_reset_msg_type *buf)
  {
 -      rndis_reset_cmplt_type  *resp;
 -      rndis_resp_t            *r;
 -      struct rndis_params     *params = rndis_per_dev_params + configNr;
 +      rndis_reset_cmplt_type *resp;
 +      rndis_resp_t *r;
 +      struct rndis_params *params = rndis_per_dev_params + configNr;
  
 -      r = rndis_add_response (configNr, sizeof (rndis_reset_cmplt_type));
 +      r = rndis_add_response(configNr, sizeof(rndis_reset_cmplt_type));
        if (!r)
                return -ENOMEM;
 -      resp = (rndis_reset_cmplt_type *) r->buf;
 +      resp = (rndis_reset_cmplt_type *)r->buf;
  
 -      resp->MessageType = cpu_to_le32 (REMOTE_NDIS_RESET_CMPLT);
 -      resp->MessageLength = cpu_to_le32 (16);
 -      resp->Status = cpu_to_le32 (RNDIS_STATUS_SUCCESS);
 +      resp->MessageType = cpu_to_le32(REMOTE_NDIS_RESET_CMPLT);
 +      resp->MessageLength = cpu_to_le32(16);
 +      resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
        /* resent information */
 -      resp->AddressingReset = cpu_to_le32 (1);
 +      resp->AddressingReset = cpu_to_le32(1);
  
        params->resp_avail(params->v);
        return 0;
  }
  
 -static int rndis_keepalive_response (int configNr,
 -                              rndis_keepalive_msg_type *buf)
 +static int rndis_keepalive_response(int configNr,
 +                                  rndis_keepalive_msg_type *buf)
  {
 -      rndis_keepalive_cmplt_type      *resp;
 -      rndis_resp_t                    *r;
 -      struct rndis_params     *params = rndis_per_dev_params + configNr;
 +      rndis_keepalive_cmplt_type *resp;
 +      rndis_resp_t *r;
 +      struct rndis_params *params = rndis_per_dev_params + configNr;
  
        /* host "should" check only in RNDIS_DATA_INITIALIZED state */
  
 -      r = rndis_add_response (configNr, sizeof (rndis_keepalive_cmplt_type));
 +      r = rndis_add_response(configNr, sizeof(rndis_keepalive_cmplt_type));
        if (!r)
                return -ENOMEM;
 -      resp = (rndis_keepalive_cmplt_type *) r->buf;
 +      resp = (rndis_keepalive_cmplt_type *)r->buf;
  
 -      resp->MessageType = cpu_to_le32 (
 +      resp->MessageType = cpu_to_le32(
                        REMOTE_NDIS_KEEPALIVE_CMPLT);
 -      resp->MessageLength = cpu_to_le32 (16);
 +      resp->MessageLength = cpu_to_le32(16);
        resp->RequestID = buf->RequestID; /* Still LE in msg buffer */
 -      resp->Status = cpu_to_le32 (RNDIS_STATUS_SUCCESS);
 +      resp->Status = cpu_to_le32(RNDIS_STATUS_SUCCESS);
  
        params->resp_avail(params->v);
        return 0;
  /*
   * Device to Host Comunication
   */
 -static int rndis_indicate_status_msg (int configNr, u32 status)
 +static int rndis_indicate_status_msg(int configNr, u32 status)
  {
 -      rndis_indicate_status_msg_type  *resp;
 -      rndis_resp_t                    *r;
 -      struct rndis_params     *params = rndis_per_dev_params + configNr;
 +      rndis_indicate_status_msg_type *resp;
 +      rndis_resp_t *r;
 +      struct rndis_params *params = rndis_per_dev_params + configNr;
  
        if (params->state == RNDIS_UNINITIALIZED)
                return -ENOTSUPP;
  
 -      r = rndis_add_response (configNr,
 -                              sizeof (rndis_indicate_status_msg_type));
 +      r = rndis_add_response(configNr,
 +                              sizeof(rndis_indicate_status_msg_type));
        if (!r)
                return -ENOMEM;
 -      resp = (rndis_indicate_status_msg_type *) r->buf;
 +      resp = (rndis_indicate_status_msg_type *)r->buf;
  
 -      resp->MessageType = cpu_to_le32 (
 -                      REMOTE_NDIS_INDICATE_STATUS_MSG);
 -      resp->MessageLength = cpu_to_le32 (20);
 -      resp->Status = cpu_to_le32 (status);
 -      resp->StatusBufferLength = cpu_to_le32 (0);
 -      resp->StatusBufferOffset = cpu_to_le32 (0);
 +      resp->MessageType = cpu_to_le32(REMOTE_NDIS_INDICATE_STATUS_MSG);
 +      resp->MessageLength = cpu_to_le32(20);
 +      resp->Status = cpu_to_le32(status);
 +      resp->StatusBufferLength = cpu_to_le32(0);
 +      resp->StatusBufferOffset = cpu_to_le32(0);
  
        params->resp_avail(params->v);
        return 0;
  }
  
 -int rndis_signal_connect (int configNr)
 +int rndis_signal_connect(int configNr)
  {
 -      rndis_per_dev_params [configNr].media_state
 +      rndis_per_dev_params[configNr].media_state
                        = NDIS_MEDIA_STATE_CONNECTED;
 -      return rndis_indicate_status_msg (configNr,
 +      return rndis_indicate_status_msg(configNr,
                                          RNDIS_STATUS_MEDIA_CONNECT);
  }
  
 -int rndis_signal_disconnect (int configNr)
 +int rndis_signal_disconnect(int configNr)
  {
 -      rndis_per_dev_params [configNr].media_state
 +      rndis_per_dev_params[configNr].media_state
                        = NDIS_MEDIA_STATE_DISCONNECTED;
 -      return rndis_indicate_status_msg (configNr,
 +      return rndis_indicate_status_msg(configNr,
                                          RNDIS_STATUS_MEDIA_DISCONNECT);
  }
  
 -void rndis_uninit (int configNr)
 +void rndis_uninit(int configNr)
  {
        u8 *buf;
        u32 length;
  
        if (configNr >= RNDIS_MAX_CONFIGS)
                return;
 -      rndis_per_dev_params [configNr].state = RNDIS_UNINITIALIZED;
 +      rndis_per_dev_params[configNr].state = RNDIS_UNINITIALIZED;
  
        /* drain the response queue */
        while ((buf = rndis_get_next_response(configNr, &length)))
                rndis_free_response(configNr, buf);
  }
  
 -void rndis_set_host_mac (int configNr, const u8 *addr)
 +void rndis_set_host_mac(int configNr, const u8 *addr)
  {
 -      rndis_per_dev_params [configNr].host_mac = addr;
 +      rndis_per_dev_params[configNr].host_mac = addr;
  }
  
  /*
   * Message Parser
   */
 -int rndis_msg_parser (u8 configNr, u8 *buf)
 +int rndis_msg_parser(u8 configNr, u8 *buf)
  {
        u32 MsgType, MsgLength;
        __le32 *tmp;
 -      struct rndis_params             *params;
 +      struct rndis_params *params;
  
        if (!buf)
                return -ENOMEM;
  
 -      tmp = (__le32 *) buf;
 +      tmp = (__le32 *)buf;
        MsgType   = get_unaligned_le32(tmp++);
        MsgLength = get_unaligned_le32(tmp++);
  
        if (configNr >= RNDIS_MAX_CONFIGS)
                return -ENOTSUPP;
 -      params = &rndis_per_dev_params [configNr];
 +      params = &rndis_per_dev_params[configNr];
  
        /* NOTE: RNDIS is *EXTREMELY* chatty ... Windows constantly polls for
         * rx/tx statistics and link status, in addition to KEEPALIVE traffic
        switch (MsgType) {
        case REMOTE_NDIS_INITIALIZE_MSG:
                pr_debug("%s: REMOTE_NDIS_INITIALIZE_MSG\n",
 -                      __func__ );
 +                      __func__);
                params->state = RNDIS_INITIALIZED;
 -              return  rndis_init_response (configNr,
 -                                      (rndis_init_msg_type *) buf);
 +              return rndis_init_response(configNr,
 +                                      (rndis_init_msg_type *)buf);
  
        case REMOTE_NDIS_HALT_MSG:
                pr_debug("%s: REMOTE_NDIS_HALT_MSG\n",
 -                      __func__ );
 +                      __func__);
                params->state = RNDIS_UNINITIALIZED;
                if (params->dev) {
 -                      netif_carrier_off (params->dev);
 -                      netif_stop_queue (params->dev);
 +                      netif_carrier_off(params->dev);
 +                      netif_stop_queue(params->dev);
                }
                return 0;
  
        case REMOTE_NDIS_QUERY_MSG:
 -              return rndis_query_response (configNr,
 -                                      (rndis_query_msg_type *) buf);
 +              return rndis_query_response(configNr,
 +                                      (rndis_query_msg_type *)buf);
  
        case REMOTE_NDIS_SET_MSG:
 -              return rndis_set_response (configNr,
 -                                      (rndis_set_msg_type *) buf);
 +              return rndis_set_response(configNr,
 +                                      (rndis_set_msg_type *)buf);
  
        case REMOTE_NDIS_RESET_MSG:
                pr_debug("%s: REMOTE_NDIS_RESET_MSG\n",
 -                      __func__ );
 -              return rndis_reset_response (configNr,
 -                                      (rndis_reset_msg_type *) buf);
 +                      __func__);
 +              return rndis_reset_response(configNr,
 +                                      (rndis_reset_msg_type *)buf);
  
        case REMOTE_NDIS_KEEPALIVE_MSG:
                /* For USB: host does this every 5 seconds */
                if (rndis_debug > 1)
                        pr_debug("%s: REMOTE_NDIS_KEEPALIVE_MSG\n",
 -                              __func__ );
 -              return rndis_keepalive_response (configNr,
 +                              __func__);
 +              return rndis_keepalive_response(configNr,
                                                 (rndis_keepalive_msg_type *)
                                                 buf);
  
                 * suspending itself.
                 */
                pr_warning("%s: unknown RNDIS message 0x%08X len %d\n",
 -                      __func__ , MsgType, MsgLength);
 +                      __func__, MsgType, MsgLength);
                {
                        unsigned i;
                        for (i = 0; i < MsgLength; i += 16) {
@@@ -899,10 -897,10 +899,10 @@@ int rndis_register(void (*resp_avail)(v
                return -EINVAL;
  
        for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {
 -              if (!rndis_per_dev_params [i].used) {
 -                      rndis_per_dev_params [i].used = 1;
 -                      rndis_per_dev_params [i].resp_avail = resp_avail;
 -                      rndis_per_dev_params [i].v = v;
 +              if (!rndis_per_dev_params[i].used) {
 +                      rndis_per_dev_params[i].used = 1;
 +                      rndis_per_dev_params[i].resp_avail = resp_avail;
 +                      rndis_per_dev_params[i].v = v;
                        pr_debug("%s: configNr = %d\n", __func__, i);
                        return i;
                }
        return -ENODEV;
  }
  
 -void rndis_deregister (int configNr)
 +void rndis_deregister(int configNr)
  {
 -      pr_debug("%s: \n", __func__);
 +      pr_debug("%s:\n", __func__);
  
        if (configNr >= RNDIS_MAX_CONFIGS) return;
 -      rndis_per_dev_params [configNr].used = 0;
 +      rndis_per_dev_params[configNr].used = 0;
-       return;
  }
  
  int rndis_set_param_dev(u8 configNr, struct net_device *dev, u16 *cdc_filter)
                return -EINVAL;
        if (configNr >= RNDIS_MAX_CONFIGS) return -1;
  
 -      rndis_per_dev_params [configNr].dev = dev;
 -      rndis_per_dev_params [configNr].filter = cdc_filter;
 +      rndis_per_dev_params[configNr].dev = dev;
 +      rndis_per_dev_params[configNr].filter = cdc_filter;
  
        return 0;
  }
  
 -int rndis_set_param_vendor (u8 configNr, u32 vendorID, const char *vendorDescr)
 +int rndis_set_param_vendor(u8 configNr, u32 vendorID, const char *vendorDescr)
  {
        pr_debug("%s:\n", __func__);
        if (!vendorDescr) return -1;
        if (configNr >= RNDIS_MAX_CONFIGS) return -1;
  
 -      rndis_per_dev_params [configNr].vendorID = vendorID;
 -      rndis_per_dev_params [configNr].vendorDescr = vendorDescr;
 +      rndis_per_dev_params[configNr].vendorID = vendorID;
 +      rndis_per_dev_params[configNr].vendorDescr = vendorDescr;
  
        return 0;
  }
  
 -int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed)
 +int rndis_set_param_medium(u8 configNr, u32 medium, u32 speed)
  {
        pr_debug("%s: %u %u\n", __func__, medium, speed);
        if (configNr >= RNDIS_MAX_CONFIGS) return -1;
  
 -      rndis_per_dev_params [configNr].medium = medium;
 -      rndis_per_dev_params [configNr].speed = speed;
 +      rndis_per_dev_params[configNr].medium = medium;
 +      rndis_per_dev_params[configNr].speed = speed;
  
        return 0;
  }
  
 -void rndis_add_hdr (struct sk_buff *skb)
 +void rndis_add_hdr(struct sk_buff *skb)
  {
 -      struct rndis_packet_msg_type    *header;
 +      struct rndis_packet_msg_type *header;
  
        if (!skb)
                return;
 -      header = (void *) skb_push (skb, sizeof *header);
 -      memset (header, 0, sizeof *header);
 +      header = (void *)skb_push(skb, sizeof(*header));
 +      memset(header, 0, sizeof *header);
        header->MessageType = cpu_to_le32(REMOTE_NDIS_PACKET_MSG);
        header->MessageLength = cpu_to_le32(skb->len);
 -      header->DataOffset = cpu_to_le32 (36);
 -      header->DataLength = cpu_to_le32(skb->len - sizeof *header);
 +      header->DataOffset = cpu_to_le32(36);
 +      header->DataLength = cpu_to_le32(skb->len - sizeof(*header));
  }
  
 -void rndis_free_response (int configNr, u8 *buf)
 +void rndis_free_response(int configNr, u8 *buf)
  {
 -      rndis_resp_t            *r;
 -      struct list_head        *act, *tmp;
 +      rndis_resp_t *r;
 +      struct list_head *act, *tmp;
  
 -      list_for_each_safe (act, tmp,
 -                      &(rndis_per_dev_params [configNr].resp_queue))
 +      list_for_each_safe(act, tmp,
 +                      &(rndis_per_dev_params[configNr].resp_queue))
        {
 -              r = list_entry (act, rndis_resp_t, list);
 +              r = list_entry(act, rndis_resp_t, list);
                if (r && r->buf == buf) {
 -                      list_del (&r->list);
 -                      kfree (r);
 +                      list_del(&r->list);
 +                      kfree(r);
                }
        }
  }
  
 -u8 *rndis_get_next_response (int configNr, u32 *length)
 +u8 *rndis_get_next_response(int configNr, u32 *length)
  {
 -      rndis_resp_t            *r;
 -      struct list_head        *act, *tmp;
 +      rndis_resp_t *r;
 +      struct list_head *act, *tmp;
  
        if (!length) return NULL;
  
 -      list_for_each_safe (act, tmp,
 -                      &(rndis_per_dev_params [configNr].resp_queue))
 +      list_for_each_safe(act, tmp,
 +                      &(rndis_per_dev_params[configNr].resp_queue))
        {
 -              r = list_entry (act, rndis_resp_t, list);
 +              r = list_entry(act, rndis_resp_t, list);
                if (!r->send) {
                        r->send = 1;
                        *length = r->length;
        return NULL;
  }
  
 -static rndis_resp_t *rndis_add_response (int configNr, u32 length)
 +static rndis_resp_t *rndis_add_response(int configNr, u32 length)
  {
 -      rndis_resp_t    *r;
 +      rndis_resp_t *r;
  
 -      /* NOTE:  this gets copied into ether.c USB_BUFSIZ bytes ... */
 -      r = kmalloc (sizeof (rndis_resp_t) + length, GFP_ATOMIC);
 +      /* NOTE: this gets copied into ether.c USB_BUFSIZ bytes ... */
 +      r = kmalloc(sizeof(rndis_resp_t) + length, GFP_ATOMIC);
        if (!r) return NULL;
  
 -      r->buf = (u8 *) (r + 1);
 +      r->buf = (u8 *)(r + 1);
        r->length = length;
        r->send = 0;
  
 -      list_add_tail (&r->list,
 -              &(rndis_per_dev_params [configNr].resp_queue));
 +      list_add_tail(&r->list,
 +              &(rndis_per_dev_params[configNr].resp_queue));
        return r;
  }
  
@@@ -1031,7 -1027,7 +1029,7 @@@ int rndis_rm_hdr(struct gether *port
                        struct sk_buff_head *list)
  {
        /* tmp points to a struct rndis_packet_msg_type */
 -      __le32          *tmp = (void *) skb->data;
 +      __le32 *tmp = (void *)skb->data;
  
        /* MessageType, MessageLength */
        if (cpu_to_le32(REMOTE_NDIS_PACKET_MSG)
        return 0;
  }
  
 -#ifdef        CONFIG_USB_GADGET_DEBUG_FILES
 +#ifdef CONFIG_USB_GADGET_DEBUG_FILES
  
  static int rndis_proc_show(struct seq_file *m, void *v)
  {
  }
  
  static ssize_t rndis_proc_write(struct file *file, const char __user *buffer,
 -              size_t count, loff_t *ppos)
 +                              size_t count, loff_t *ppos)
  {
        rndis_params *p = PDE(file->f_path.dentry->d_inode)->data;
        u32 speed = 0;
                case '8':
                case '9':
                        fl_speed = 1;
 -                      speed = speed*10 + c - '0';
 +                      speed = speed * 10 + c - '0';
                        break;
                case 'C':
                case 'c':
 -                      rndis_signal_connect (p->confignr);
 +                      rndis_signal_connect(p->confignr);
                        break;
                case 'D':
                case 'd':
@@@ -1143,14 -1139,14 +1141,14 @@@ static const struct file_operations rnd
        .write          = rndis_proc_write,
  };
  
 -#define       NAME_TEMPLATE   "driver/rndis-%03d"
 +#define       NAME_TEMPLATE "driver/rndis-%03d"
  
  static struct proc_dir_entry *rndis_connect_state [RNDIS_MAX_CONFIGS];
  
 -#endif        /* CONFIG_USB_GADGET_DEBUG_FILES */
 +#endif /* CONFIG_USB_GADGET_DEBUG_FILES */
  
  
 -int __init rndis_init (void)
 +int rndis_init(void)
  {
        u8 i;
  
  #ifdef        CONFIG_USB_GADGET_DEBUG_FILES
                char name [20];
  
 -              sprintf (name, NAME_TEMPLATE, i);
 -              if (!(rndis_connect_state [i]
 -                              = proc_create_data(name, 0660, NULL,
 +              sprintf(name, NAME_TEMPLATE, i);
 +              rndis_connect_state[i] = proc_create_data(name, 0660, NULL,
                                        &rndis_proc_fops,
 -                                      (void *)(rndis_per_dev_params + i))))
 -              {
 -                      pr_debug("%s :remove entries", __func__);
 +                                      (void *)(rndis_per_dev_params + i));
 +              if (!rndis_connect_state[i]) {
 +                      pr_debug("%sremove entries", __func__);
                        while (i) {
 -                              sprintf (name, NAME_TEMPLATE, --i);
 -                              remove_proc_entry (name, NULL);
 +                              sprintf(name, NAME_TEMPLATE, --i);
 +                              remove_proc_entry(name, NULL);
                        }
                        pr_debug("\n");
                        return -EIO;
                }
  #endif
 -              rndis_per_dev_params [i].confignr = i;
 -              rndis_per_dev_params [i].used = 0;
 -              rndis_per_dev_params [i].state = RNDIS_UNINITIALIZED;
 -              rndis_per_dev_params [i].media_state
 +              rndis_per_dev_params[i].confignr = i;
 +              rndis_per_dev_params[i].used = 0;
 +              rndis_per_dev_params[i].state = RNDIS_UNINITIALIZED;
 +              rndis_per_dev_params[i].media_state
                                = NDIS_MEDIA_STATE_DISCONNECTED;
 -              INIT_LIST_HEAD (&(rndis_per_dev_params [i].resp_queue));
 +              INIT_LIST_HEAD(&(rndis_per_dev_params[i].resp_queue));
        }
  
        return 0;
  }
  
 -void rndis_exit (void)
 +void rndis_exit(void)
  {
 -#ifdef        CONFIG_USB_GADGET_DEBUG_FILES
 +#ifdef CONFIG_USB_GADGET_DEBUG_FILES
        u8 i;
 -      char name [20];
 +      char name[20];
  
        for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {
 -              sprintf (name, NAME_TEMPLATE, i);
 -              remove_proc_entry (name, NULL);
 +              sprintf(name, NAME_TEMPLATE, i);
 +              remove_proc_entry(name, NULL);
        }
  #endif
  }
 -
index 15fe3ecd203ba4b67b19e9afb97def6ade2f4e29,ac0f7a4b03410f51dd8b637717207222cea4f259..2adae8e39bba12d47b06103640800b0e38aaec36
@@@ -194,17 -194,6 +194,17 @@@ static int handshake (struct ehci_hcd *
        return -ETIMEDOUT;
  }
  
 +/* check TDI/ARC silicon is in host mode */
 +static int tdi_in_host_mode (struct ehci_hcd *ehci)
 +{
 +      u32 __iomem     *reg_ptr;
 +      u32             tmp;
 +
 +      reg_ptr = (u32 __iomem *)(((u8 __iomem *)ehci->regs) + USBMODE);
 +      tmp = ehci_readl(ehci, reg_ptr);
 +      return (tmp & 3) == USBMODE_CM_HC;
 +}
 +
  /* force HC to halt state from unknown (EHCI spec section 2.3) */
  static int ehci_halt (struct ehci_hcd *ehci)
  {
        /* disable any irqs left enabled by previous code */
        ehci_writel(ehci, 0, &ehci->regs->intr_enable);
  
 +      if (ehci_is_TDI(ehci) && tdi_in_host_mode(ehci) == 0) {
 +              return 0;
 +      }
 +
        if ((temp & STS_HALT) != 0)
                return 0;
  
@@@ -1095,7 -1080,6 +1095,6 @@@ nogood
        ep->hcpriv = NULL;
  done:
        spin_unlock_irqrestore (&ehci->lock, flags);
-       return;
  }
  
  static void
index 1dfb2c8f7707af024a344ede58c835e09c5f069e,d0abb9b0e6732b19f40cc4cc011fecf2e9c33a04..e49b75a780006dbd019e773a3888b7f4892c69a3
@@@ -27,8 -27,8 +27,8 @@@
    *    * 32 transfer descriptors (called ETDs)
    *    * 4Kb of Data memory
    *
-   * The data memory is shared between the host and fuction controlers
-   * (but this driver only supports the host controler)
+   * The data memory is shared between the host and function controllers
+   * (but this driver only supports the host controller)
    *
    * So setting up a transfer involves:
    *    * Allocating a ETD
@@@ -57,7 -57,6 +57,7 @@@
  #include <linux/slab.h>
  #include <linux/usb.h>
  #include <linux/usb/hcd.h>
 +#include <linux/dma-mapping.h>
  
  #include "imx21-hcd.h"
  
@@@ -137,18 -136,9 +137,18 @@@ static int imx21_hc_get_frame(struct us
        return wrap_frame(readl(imx21->regs + USBH_FRMNUB));
  }
  
 +static inline bool unsuitable_for_dma(dma_addr_t addr)
 +{
 +      return (addr & 3) != 0;
 +}
  
  #include "imx21-dbg.c"
  
 +static void nonisoc_urb_completed_for_etd(
 +      struct imx21 *imx21, struct etd_priv *etd, int status);
 +static void schedule_nonisoc_etd(struct imx21 *imx21, struct urb *urb);
 +static void free_dmem(struct imx21 *imx21, struct etd_priv *etd);
 +
  /* =========================================== */
  /* ETD management                             */
  /* ===========================================        */
@@@ -195,8 -185,7 +195,8 @@@ static void reset_etd(struct imx21 *imx
                etd_writel(imx21, num, i, 0);
        etd->urb = NULL;
        etd->ep = NULL;
 -      etd->td = NULL;;
 +      etd->td = NULL;
 +      etd->bounce_buffer = NULL;
  }
  
  static void free_etd(struct imx21 *imx21, int num)
@@@ -232,94 -221,26 +232,94 @@@ static void setup_etd_dword0(struct imx
                ((u32) maxpacket << DW0_MAXPKTSIZ));
  }
  
 -static void activate_etd(struct imx21 *imx21,
 -      int etd_num, dma_addr_t dma, u8 dir)
 +/**
 + * Copy buffer to data controller data memory.
 + * We cannot use memcpy_toio() because the hardware requires 32bit writes
 + */
 +static void copy_to_dmem(
 +      struct imx21 *imx21, int dmem_offset, void *src, int count)
 +{
 +      void __iomem *dmem = imx21->regs + USBOTG_DMEM + dmem_offset;
 +      u32 word = 0;
 +      u8 *p = src;
 +      int byte = 0;
 +      int i;
 +
 +      for (i = 0; i < count; i++) {
 +              byte = i % 4;
 +              word += (*p++ << (byte * 8));
 +              if (byte == 3) {
 +                      writel(word, dmem);
 +                      dmem += 4;
 +                      word = 0;
 +              }
 +      }
 +
 +      if (count && byte != 3)
 +              writel(word, dmem);
 +}
 +
 +static void activate_etd(struct imx21 *imx21, int etd_num, u8 dir)
  {
        u32 etd_mask = 1 << etd_num;
        struct etd_priv *etd = &imx21->etd[etd_num];
  
 +      if (etd->dma_handle && unsuitable_for_dma(etd->dma_handle)) {
 +              /* For non aligned isoc the condition below is always true */
 +              if (etd->len <= etd->dmem_size) {
 +                      /* Fits into data memory, use PIO */
 +                      if (dir != TD_DIR_IN) {
 +                              copy_to_dmem(imx21,
 +                                              etd->dmem_offset,
 +                                              etd->cpu_buffer, etd->len);
 +                      }
 +                      etd->dma_handle = 0;
 +
 +              } else {
 +                      /* Too big for data memory, use bounce buffer */
 +                      enum dma_data_direction dmadir;
 +
 +                      if (dir == TD_DIR_IN) {
 +                              dmadir = DMA_FROM_DEVICE;
 +                              etd->bounce_buffer = kmalloc(etd->len,
 +                                                              GFP_ATOMIC);
 +                      } else {
 +                              dmadir = DMA_TO_DEVICE;
 +                              etd->bounce_buffer = kmemdup(etd->cpu_buffer,
 +                                                              etd->len,
 +                                                              GFP_ATOMIC);
 +                      }
 +                      if (!etd->bounce_buffer) {
 +                              dev_err(imx21->dev, "failed bounce alloc\n");
 +                              goto err_bounce_alloc;
 +                      }
 +
 +                      etd->dma_handle =
 +                              dma_map_single(imx21->dev,
 +                                              etd->bounce_buffer,
 +                                              etd->len,
 +                                              dmadir);
 +                      if (dma_mapping_error(imx21->dev, etd->dma_handle)) {
 +                              dev_err(imx21->dev, "failed bounce map\n");
 +                              goto err_bounce_map;
 +                      }
 +              }
 +      }
 +
        clear_toggle_bit(imx21, USBH_ETDDONESTAT, etd_mask);
        set_register_bits(imx21, USBH_ETDDONEEN, etd_mask);
        clear_toggle_bit(imx21, USBH_XFILLSTAT, etd_mask);
        clear_toggle_bit(imx21, USBH_YFILLSTAT, etd_mask);
  
 -      if (dma) {
 +      if (etd->dma_handle) {
                set_register_bits(imx21, USB_ETDDMACHANLCLR, etd_mask);
                clear_toggle_bit(imx21, USBH_XBUFSTAT, etd_mask);
                clear_toggle_bit(imx21, USBH_YBUFSTAT, etd_mask);
 -              writel(dma, imx21->regs + USB_ETDSMSA(etd_num));
 +              writel(etd->dma_handle, imx21->regs + USB_ETDSMSA(etd_num));
                set_register_bits(imx21, USB_ETDDMAEN, etd_mask);
        } else {
                if (dir != TD_DIR_IN) {
 -                      /* need to set for ZLP */
 +                      /* need to set for ZLP and PIO */
                        set_toggle_bit(imx21, USBH_XFILLSTAT, etd_mask);
                        set_toggle_bit(imx21, USBH_YFILLSTAT, etd_mask);
                }
  
        etd->active_count = 1;
        writel(etd_mask, imx21->regs + USBH_ETDENSET);
 +      return;
 +
 +err_bounce_map:
 +      kfree(etd->bounce_buffer);
 +
 +err_bounce_alloc:
 +      free_dmem(imx21, etd);
 +      nonisoc_urb_completed_for_etd(imx21, etd, -ENOMEM);
  }
  
  /* ===========================================        */
@@@ -410,23 -323,16 +410,23 @@@ static void activate_queued_etd(struct 
        etd_writel(imx21, etd_num, 1,
            ((dmem_offset + maxpacket) << DW1_YBUFSRTAD) | dmem_offset);
  
 +      etd->dmem_offset = dmem_offset;
        urb_priv->active = 1;
 -      activate_etd(imx21, etd_num, etd->dma_handle, dir);
 +      activate_etd(imx21, etd_num, dir);
  }
  
 -static void free_dmem(struct imx21 *imx21, int offset)
 +static void free_dmem(struct imx21 *imx21, struct etd_priv *etd)
  {
        struct imx21_dmem_area *area;
 -      struct etd_priv *etd, *tmp;
 +      struct etd_priv *tmp;
        int found = 0;
 +      int offset;
  
 +      if (!etd->dmem_size)
 +              return;
 +      etd->dmem_size = 0;
 +
 +      offset = etd->dmem_offset;
        list_for_each_entry(area, &imx21->dmem_list, list) {
                if (area->offset == offset) {
                        debug_dmem_freed(imx21, area->size);
@@@ -472,23 -378,20 +472,23 @@@ static void free_epdmem(struct imx21 *i
  /* ===========================================        */
  /* End handling                               */
  /* ===========================================        */
 -static void schedule_nonisoc_etd(struct imx21 *imx21, struct urb *urb);
  
  /* Endpoint now idle - release it's ETD(s) or asssign to queued request */
  static void ep_idle(struct imx21 *imx21, struct ep_priv *ep_priv)
  {
 -      int etd_num;
        int i;
  
        for (i = 0; i < NUM_ISO_ETDS; i++) {
 -              etd_num = ep_priv->etd[i];
 +              int etd_num = ep_priv->etd[i];
 +              struct etd_priv *etd;
                if (etd_num < 0)
                        continue;
  
 +              etd = &imx21->etd[etd_num];
                ep_priv->etd[i] = -1;
 +
 +              free_dmem(imx21, etd); /* for isoc */
 +
                if (list_empty(&imx21->queue_for_etd)) {
                        free_etd(imx21, etd_num);
                        continue;
@@@ -534,24 -437,6 +534,24 @@@ __acquires(imx21->lock
                ep_idle(imx21, ep_priv);
  }
  
 +static void nonisoc_urb_completed_for_etd(
 +      struct imx21 *imx21, struct etd_priv *etd, int status)
 +{
 +      struct usb_host_endpoint *ep = etd->ep;
 +
 +      urb_done(imx21->hcd, etd->urb, status);
 +      etd->urb = NULL;
 +
 +      if (!list_empty(&ep->urb_list)) {
 +              struct urb *urb = list_first_entry(
 +                                      &ep->urb_list, struct urb, urb_list);
 +
 +              dev_vdbg(imx21->dev, "next URB %p\n", urb);
 +              schedule_nonisoc_etd(imx21, urb);
 +      }
 +}
 +
 +
  /* ===========================================        */
  /* ISOC Handling ...                          */
  /* ===========================================        */
@@@ -604,8 -489,6 +604,8 @@@ too_late
                etd->ep = td->ep;
                etd->urb = td->urb;
                etd->len = td->len;
 +              etd->dma_handle = td->dma_handle;
 +              etd->cpu_buffer = td->cpu_buffer;
  
                debug_isoc_submitted(imx21, cur_frame, td);
  
                        (TD_NOTACCESSED << DW3_COMPCODE0) |
                        (td->len << DW3_PKTLEN0));
  
 -              activate_etd(imx21, etd_num, td->data, dir);
 +              activate_etd(imx21, etd_num, dir);
        }
  }
  
 -static void isoc_etd_done(struct usb_hcd *hcd, struct urb *urb, int etd_num)
 +static void isoc_etd_done(struct usb_hcd *hcd, int etd_num)
  {
        struct imx21 *imx21 = hcd_to_imx21(hcd);
        int etd_mask = 1 << etd_num;
 -      struct urb_priv *urb_priv = urb->hcpriv;
        struct etd_priv *etd = imx21->etd + etd_num;
 +      struct urb *urb = etd->urb;
 +      struct urb_priv *urb_priv = urb->hcpriv;
        struct td *td = etd->td;
        struct usb_host_endpoint *ep = etd->ep;
        int isoc_index = td->isoc_index;
                        bytes_xfrd, td->len, urb, etd_num, isoc_index);
        }
  
 -      if (dir_in)
 +      if (dir_in) {
                clear_toggle_bit(imx21, USBH_XFILLSTAT, etd_mask);
 +              if (!etd->dma_handle)
 +                      memcpy_fromio(etd->cpu_buffer,
 +                              imx21->regs + USBOTG_DMEM + etd->dmem_offset,
 +                              bytes_xfrd);
 +      }
  
        urb->actual_length += bytes_xfrd;
        urb->iso_frame_desc[isoc_index].actual_length = bytes_xfrd;
@@@ -692,43 -569,30 +692,43 @@@ static struct ep_priv *alloc_isoc_ep
        int i;
  
        ep_priv = kzalloc(sizeof(struct ep_priv), GFP_ATOMIC);
 -      if (ep_priv == NULL)
 +      if (!ep_priv)
                return NULL;
  
 -      /* Allocate the ETDs */
 -      for (i = 0; i < NUM_ISO_ETDS; i++) {
 -              ep_priv->etd[i] = alloc_etd(imx21);
 -              if (ep_priv->etd[i] < 0) {
 -                      int j;
 -                      dev_err(imx21->dev, "isoc: Couldn't allocate etd\n");
 -                      for (j = 0; j < i; j++)
 -                              free_etd(imx21, ep_priv->etd[j]);
 -                      goto alloc_etd_failed;
 -              }
 -              imx21->etd[ep_priv->etd[i]].ep = ep;
 -      }
 +      for (i = 0; i < NUM_ISO_ETDS; i++)
 +              ep_priv->etd[i] = -1;
  
        INIT_LIST_HEAD(&ep_priv->td_list);
        ep_priv->ep = ep;
        ep->hcpriv = ep_priv;
        return ep_priv;
 +}
 +
 +static int alloc_isoc_etds(struct imx21 *imx21, struct ep_priv *ep_priv)
 +{
 +      int i, j;
 +      int etd_num;
 +
 +      /* Allocate the ETDs if required */
 +      for (i = 0; i < NUM_ISO_ETDS; i++) {
 +              if (ep_priv->etd[i] < 0) {
 +                      etd_num = alloc_etd(imx21);
 +                      if (etd_num < 0)
 +                              goto alloc_etd_failed;
 +
 +                      ep_priv->etd[i] = etd_num;
 +                      imx21->etd[etd_num].ep = ep_priv->ep;
 +              }
 +      }
 +      return 0;
  
  alloc_etd_failed:
 -      kfree(ep_priv);
 -      return NULL;
 +      dev_err(imx21->dev, "isoc: Couldn't allocate etd\n");
 +      for (j = 0; j < i; j++) {
 +              free_etd(imx21, ep_priv->etd[j]);
 +              ep_priv->etd[j] = -1;
 +      }
 +      return -ENOMEM;
  }
  
  static int imx21_hc_urb_enqueue_isoc(struct usb_hcd *hcd,
                ep_priv = ep->hcpriv;
        }
  
 +      ret = alloc_isoc_etds(imx21, ep_priv);
 +      if (ret)
 +              goto alloc_etd_failed;
 +
        ret = usb_hcd_link_urb_to_ep(hcd, urb);
        if (ret)
                goto link_failed;
        /* set up transfers */
        td = urb_priv->isoc_td;
        for (i = 0; i < urb->number_of_packets; i++, td++) {
 +              unsigned int offset = urb->iso_frame_desc[i].offset;
                td->ep = ep;
                td->urb = urb;
                td->len = urb->iso_frame_desc[i].length;
                td->isoc_index = i;
                td->frame = wrap_frame(urb->start_frame + urb->interval * i);
 -              td->data = urb->transfer_dma + urb->iso_frame_desc[i].offset;
 +              td->dma_handle = urb->transfer_dma + offset;
 +              td->cpu_buffer = urb->transfer_buffer + offset;
                list_add_tail(&td->list, &ep_priv->td_list);
        }
  
@@@ -853,7 -711,6 +853,7 @@@ alloc_dmem_failed
        usb_hcd_unlink_urb_from_ep(hcd, urb);
  
  link_failed:
 +alloc_etd_failed:
  alloc_ep_failed:
        spin_unlock_irqrestore(&imx21->lock, flags);
        kfree(urb_priv->isoc_td);
@@@ -877,7 -734,9 +877,7 @@@ static void dequeue_isoc_urb(struct imx
                                struct etd_priv *etd = imx21->etd + etd_num;
  
                                reset_etd(imx21, etd_num);
 -                              if (etd->dmem_size)
 -                                      free_dmem(imx21, etd->dmem_offset);
 -                              etd->dmem_size = 0;
 +                              free_dmem(imx21, etd);
                        }
                }
        }
@@@ -902,6 -761,7 +902,6 @@@ static void schedule_nonisoc_etd(struc
        int state = urb_priv->state;
        int etd_num = ep_priv->etd[0];
        struct etd_priv *etd;
 -      int dmem_offset;
        u32 count;
        u16 etd_buf_size;
        u16 maxpacket;
        if (usb_pipecontrol(pipe) && (state != US_CTRL_DATA)) {
                if (state == US_CTRL_SETUP) {
                        dir = TD_DIR_SETUP;
 +                      if (unsuitable_for_dma(urb->setup_dma))
 +                              unmap_urb_setup_for_dma(imx21->hcd, urb);
                        etd->dma_handle = urb->setup_dma;
 +                      etd->cpu_buffer = urb->setup_packet;
                        bufround = 0;
                        count = 8;
                        datatoggle = TD_TOGGLE_DATA0;
                } else {        /* US_CTRL_ACK */
                        dir = usb_pipeout(pipe) ? TD_DIR_IN : TD_DIR_OUT;
 -                      etd->dma_handle = urb->transfer_dma;
                        bufround = 0;
                        count = 0;
                        datatoggle = TD_TOGGLE_DATA1;
        } else {
                dir = usb_pipeout(pipe) ? TD_DIR_OUT : TD_DIR_IN;
                bufround = (dir == TD_DIR_IN) ? 1 : 0;
 +              if (unsuitable_for_dma(urb->transfer_dma))
 +                      unmap_urb_for_dma(imx21->hcd, urb);
 +
                etd->dma_handle = urb->transfer_dma;
 +              etd->cpu_buffer = urb->transfer_buffer;
                if (usb_pipebulk(pipe) && (state == US_BULK0))
                        count = 0;
                else
  
        /* allocate x and y buffer space at once */
        etd->dmem_size = (count > maxpacket) ? maxpacket * 2 : maxpacket;
 -      dmem_offset = alloc_dmem(imx21, etd->dmem_size, urb_priv->ep);
 -      if (dmem_offset < 0) {
 +      etd->dmem_offset = alloc_dmem(imx21, etd->dmem_size, urb_priv->ep);
 +      if (etd->dmem_offset < 0) {
                /* Setup everything we can in HW and update when we get DMEM */
                etd_writel(imx21, etd_num, 1, (u32)maxpacket << 16);
  
        }
  
        etd_writel(imx21, etd_num, 1,
 -              (((u32) dmem_offset + (u32) maxpacket) << DW1_YBUFSRTAD) |
 -              (u32) dmem_offset);
 +              (((u32) etd->dmem_offset + (u32) maxpacket) << DW1_YBUFSRTAD) |
 +              (u32) etd->dmem_offset);
  
        urb_priv->active = 1;
  
        /* enable the ETD to kick off transfer */
        dev_vdbg(imx21->dev, "Activating etd %d for %d bytes %s\n",
                etd_num, count, dir != TD_DIR_IN ? "out" : "in");
 -      activate_etd(imx21, etd_num, etd->dma_handle, dir);
 +      activate_etd(imx21, etd_num, dir);
  
  }
  
 -static void nonisoc_etd_done(struct usb_hcd *hcd, struct urb *urb, int etd_num)
 +static void nonisoc_etd_done(struct usb_hcd *hcd, int etd_num)
  {
        struct imx21 *imx21 = hcd_to_imx21(hcd);
        struct etd_priv *etd = &imx21->etd[etd_num];
 +      struct urb *urb = etd->urb;
        u32 etd_mask = 1 << etd_num;
        struct urb_priv *urb_priv = urb->hcpriv;
        int dir;
 -      u16 xbufaddr;
        int cc;
        u32 bytes_xfrd;
        int etd_done;
        disactivate_etd(imx21, etd_num);
  
        dir = (etd_readl(imx21, etd_num, 0) >> DW0_DIRECT) & 0x3;
 -      xbufaddr = etd_readl(imx21, etd_num, 1) & 0xffff;
        cc = (etd_readl(imx21, etd_num, 2) >> DW2_COMPCODE) & 0xf;
        bytes_xfrd = etd->len - (etd_readl(imx21, etd_num, 3) & 0x1fffff);
  
        if (dir == TD_DIR_IN) {
                clear_toggle_bit(imx21, USBH_XFILLSTAT, etd_mask);
                clear_toggle_bit(imx21, USBH_YFILLSTAT, etd_mask);
 +
 +              if (etd->bounce_buffer) {
 +                      memcpy(etd->cpu_buffer, etd->bounce_buffer, bytes_xfrd);
 +                      dma_unmap_single(imx21->dev,
 +                              etd->dma_handle, etd->len, DMA_FROM_DEVICE);
 +              } else if (!etd->dma_handle && bytes_xfrd) {/* PIO */
 +                      memcpy_fromio(etd->cpu_buffer,
 +                              imx21->regs + USBOTG_DMEM + etd->dmem_offset,
 +                              bytes_xfrd);
 +              }
        }
 -      free_dmem(imx21, xbufaddr);
 +
 +      kfree(etd->bounce_buffer);
 +      etd->bounce_buffer = NULL;
 +      free_dmem(imx21, etd);
  
        urb->error_count = 0;
        if (!(urb->transfer_flags & URB_SHORT_NOT_OK)
                break;
        }
  
 -      if (!etd_done) {
 +      if (etd_done)
 +              nonisoc_urb_completed_for_etd(imx21, etd, cc_to_error[cc]);
 +      else {
                dev_vdbg(imx21->dev, "next state=%d\n", urb_priv->state);
                schedule_nonisoc_etd(imx21, urb);
 -      } else {
 -              struct usb_host_endpoint *ep = urb->ep;
 -
 -              urb_done(hcd, urb, cc_to_error[cc]);
 -              etd->urb = NULL;
 -
 -              if (!list_empty(&ep->urb_list)) {
 -                      urb = list_first_entry(&ep->urb_list,
 -                              struct urb, urb_list);
 -                      dev_vdbg(imx21->dev, "next URB %p\n", urb);
 -                      schedule_nonisoc_etd(imx21, urb);
 -              }
        }
  }
  
 +
  static struct ep_priv *alloc_ep(void)
  {
        int i;
@@@ -1156,6 -1007,7 +1156,6 @@@ static int imx21_hc_urb_enqueue(struct 
        struct etd_priv *etd;
        int ret;
        unsigned long flags;
 -      int new_ep = 0;
  
        dev_vdbg(imx21->dev,
                "enqueue urb=%p ep=%p len=%d "
                }
                ep->hcpriv = ep_priv;
                ep_priv->ep = ep;
 -              new_ep = 1;
        }
  
        ret = usb_hcd_link_urb_to_ep(hcd, urb);
@@@ -1271,13 -1124,9 +1271,13 @@@ static int imx21_hc_urb_dequeue(struct 
        } else if (urb_priv->active) {
                int etd_num = ep_priv->etd[0];
                if (etd_num != -1) {
 +                      struct etd_priv *etd = &imx21->etd[etd_num];
 +
                        disactivate_etd(imx21, etd_num);
 -                      free_dmem(imx21, etd_readl(imx21, etd_num, 1) & 0xffff);
 -                      imx21->etd[etd_num].urb = NULL;
 +                      free_dmem(imx21, etd);
 +                      etd->urb = NULL;
 +                      kfree(etd->bounce_buffer);
 +                      etd->bounce_buffer = NULL;
                }
        }
  
@@@ -1377,9 -1226,9 +1377,9 @@@ static void process_etds(struct usb_hc
                }
  
                if (usb_pipeisoc(etd->urb->pipe))
 -                      isoc_etd_done(hcd, etd->urb, etd_num);
 +                      isoc_etd_done(hcd, etd_num);
                else
 -                      nonisoc_etd_done(hcd, etd->urb, etd_num);
 +                      nonisoc_etd_done(hcd, etd_num);
        }
  
        /* only enable SOF interrupt if it may be needed for the kludge */
@@@ -1847,7 -1696,6 +1847,7 @@@ static int imx21_probe(struct platform_
        }
  
        imx21 = hcd_to_imx21(hcd);
 +      imx21->hcd = hcd;
        imx21->dev = &pdev->dev;
        imx21->pdata = pdev->dev.platform_data;
        if (!imx21->pdata)
@@@ -1906,7 -1754,7 +1906,7 @@@ failed_clock_set
  failed_clock_get:
        iounmap(imx21->regs);
  failed_ioremap:
 -      release_mem_region(res->start, res->end - res->start);
 +      release_mem_region(res->start, resource_size(res));
  failed_request_mem:
        remove_debug_files(imx21);
        usb_put_hcd(hcd);
index 3b5785032a1067fe660e28f32440bc93331c532f,15ae39d6cc2425706c2114bdb3efa5559acbc0b5..f3713f43f3fea479bdb633e4bcf33584d56cb24a
@@@ -370,7 -370,6 +370,6 @@@ sanitize
        }
        ep->hcpriv = NULL;
        spin_unlock_irqrestore (&ohci->lock, flags);
-       return;
  }
  
  static int ohci_get_frame (struct usb_hcd *hcd)
@@@ -398,14 -397,7 +397,14 @@@ ohci_shutdown (struct usb_hcd *hcd
  
        ohci = hcd_to_ohci (hcd);
        ohci_writel (ohci, OHCI_INTR_MIE, &ohci->regs->intrdisable);
 -      ohci_usb_reset (ohci);
 +      ohci->hc_control = ohci_readl(ohci, &ohci->regs->control);
 +
 +      /* If the SHUTDOWN quirk is set, don't put the controller in RESET */
 +      ohci->hc_control &= (ohci->flags & OHCI_QUIRK_SHUTDOWN ?
 +                      OHCI_CTRL_RWC | OHCI_CTRL_HCFS :
 +                      OHCI_CTRL_RWC);
 +      ohci_writel(ohci, ohci->hc_control, &ohci->regs->control);
 +
        /* flush the writes */
        (void) ohci_readl (ohci, &ohci->regs->control);
  }
@@@ -1277,9 -1269,6 +1276,9 @@@ static void __exit ohci_hcd_mod_exit(vo
  #ifdef PLATFORM_DRIVER
        platform_driver_unregister(&PLATFORM_DRIVER);
  #endif
 +#ifdef OMAP3_PLATFORM_DRIVER
 +      platform_driver_unregister(&OMAP3_PLATFORM_DRIVER);
 +#endif
  #ifdef PS3_SYSTEM_BUS_DRIVER
        ps3_ohci_driver_unregister(&PS3_SYSTEM_BUS_DRIVER);
  #endif
index d32c3eae99cb386982758000df75768bc539a5d4,8026dc85996cf10fa154208144246d6f421728b3..32149be4ad8ebe34397e7e8c92cafd699f9ecb15
@@@ -544,8 -544,6 +544,6 @@@ static void oxu_buf_free(struct oxu_hc
        qtd->buffer = NULL;
  
        spin_unlock(&oxu->mem_lock);
-       return;
  }
  
  static inline void ehci_qtd_init(struct ehci_qtd *qtd, dma_addr_t dma)
@@@ -571,8 -569,6 +569,6 @@@ static inline void oxu_qtd_free(struct 
        oxu->qtd_used[index] = 0;
  
        spin_unlock(&oxu->mem_lock);
-       return;
  }
  
  static struct ehci_qtd *ehci_qtd_alloc(struct oxu_hcd *oxu)
@@@ -615,8 -611,6 +611,6 @@@ static void oxu_qh_free(struct oxu_hcd 
        oxu->qh_used[index] = 0;
  
        spin_unlock(&oxu->mem_lock);
-       return;
  }
  
  static void qh_destroy(struct kref *kref)
@@@ -693,8 -687,6 +687,6 @@@ static void oxu_murb_free(struct oxu_hc
        oxu->murb_used[index] = 0;
  
        spin_unlock(&oxu->mem_lock);
-       return;
  }
  
  static struct oxu_murb *oxu_murb_alloc(struct oxu_hcd *oxu)
@@@ -3070,7 -3062,6 +3062,6 @@@ nogood
        ep->hcpriv = NULL;
  done:
        spin_unlock_irqrestore(&oxu->lock, flags);
-       return;
  }
  
  static int oxu_get_frame(struct usb_hcd *hcd)
@@@ -3696,7 -3687,7 +3687,7 @@@ static void oxu_configuration(struct pl
  static int oxu_verify_id(struct platform_device *pdev, void *base)
  {
        u32 id;
 -      char *bo[] = {
 +      static const char * const bo[] = {
                "reserved",
                "128-pin LQFP",
                "84-pin TFBGA",
index 464ed977b45d9d0388af38e565fb0fe07966c712,5b37b08e0d80a4541b565fbed03916806aaeb792..4c502c890ebd2a881d666a517949026e55b3591d
@@@ -169,7 -169,6 +169,7 @@@ static int __devinit mmio_resource_enab
  static void __devinit quirk_usb_handoff_ohci(struct pci_dev *pdev)
  {
        void __iomem *base;
 +      u32 control;
  
        if (!mmio_resource_enabled(pdev, 0))
                return;
        if (base == NULL)
                return;
  
 +      control = readl(base + OHCI_CONTROL);
 +
  /* On PA-RISC, PDC can leave IR set incorrectly; ignore it there. */
 -#ifndef __hppa__
 -{
 -      u32 control = readl(base + OHCI_CONTROL);
 +#ifdef __hppa__
 +#define       OHCI_CTRL_MASK          (OHCI_CTRL_RWC | OHCI_CTRL_IR)
 +#else
 +#define       OHCI_CTRL_MASK          OHCI_CTRL_RWC
 +
        if (control & OHCI_CTRL_IR) {
                int wait_time = 500; /* arbitrary; 5 seconds */
                writel(OHCI_INTR_OC, base + OHCI_INTRENABLE);
                        dev_warn(&pdev->dev, "OHCI: BIOS handoff failed"
                                        " (BIOS bug?) %08x\n",
                                        readl(base + OHCI_CONTROL));
 -
 -              /* reset controller, preserving RWC */
 -              writel(control & OHCI_CTRL_RWC, base + OHCI_CONTROL);
        }
 -}
  #endif
  
 +      /* reset controller, preserving RWC (and possibly IR) */
 +      writel(control & OHCI_CTRL_MASK, base + OHCI_CONTROL);
 +
        /*
         * disable interrupts
         */
@@@ -342,8 -338,6 +342,6 @@@ static void __devinit quirk_usb_disable
        writel(0x3f, op_reg_base + EHCI_USBSTS);
  
        iounmap(base);
-       return;
  }
  
  /*
index c8eec9c2d89ec0875f9396e5c31731d4499a5782,c5b571050d8cf707fda9c1bbbdbbc9e24867e7d0..7839c98fa742185abcb67175e0c37f7db03d1459
@@@ -456,7 -456,6 +456,6 @@@ static void ftdi_elan_cancel_targets(st
  static void ftdi_elan_kick_command_queue(struct usb_ftdi *ftdi)
  {
          ftdi_command_queue_work(ftdi, 0);
-         return;
  }
  
  static void ftdi_elan_command_work(struct work_struct *work)
  static void ftdi_elan_kick_respond_queue(struct usb_ftdi *ftdi)
  {
          ftdi_respond_queue_work(ftdi, 0);
-         return;
  }
  
  static void ftdi_elan_respond_work(struct work_struct *work)
@@@ -2769,7 -2767,7 +2767,7 @@@ static int ftdi_elan_probe(struct usb_i
          ftdi->sequence_num = ++ftdi_instances;
          mutex_unlock(&ftdi_module_lock);
          ftdi_elan_init_kref(ftdi);
 -        init_MUTEX(&ftdi->sw_lock);
 +      sema_init(&ftdi->sw_lock, 1);
          ftdi->udev = usb_get_dev(interface_to_usbdev(interface));
          ftdi->interface = interface;
          mutex_init(&ftdi->u132_lock);
index 95058109f9fa5674463254bd345069f283800055,b71e309116a304c37ea462762ab5bdb89a240185..c2b29761fa98e3bc6646943e0dbf9a9076c7e8e3
@@@ -176,7 -176,7 +176,7 @@@ config USB_SERIAL_VISO
        help
          Say Y here if you want to connect to your HandSpring Visor, Palm
          m500 or m505 through its USB docking station. See
-         <http://usbvisor.sourceforge.net/> for more information on using this
+         <http://usbvisor.sourceforge.net/index.php3> for more information on using this
          driver.
  
          To compile this driver as a module, choose M here: the
@@@ -289,7 -289,7 +289,7 @@@ config USB_SERIAL_KEYSPA
          and was developed with their support.  You must also include
          firmware to support your particular device(s).
  
-         See <http://misc.nu/hugh/keyspan.html> for more information.
+         See <http://blemings.org/hugh/keyspan.html> for more information.
  
          To compile this driver as a module, choose M here: the
          module will be called keyspan.
@@@ -527,15 -527,6 +527,15 @@@ config USB_SERIAL_SAFE_PADDE
        bool "USB Secure Encapsulated Driver - Padded"
        depends on USB_SERIAL_SAFE
  
 +config USB_SERIAL_SAMBA
 +      tristate "USB Atmel SAM Boot Assistant (SAM-BA) driver"
 +      help
 +        Say Y here if you want to access the SAM-BA boot application of an
 +        Atmel AT91SAM device.
 +
 +        To compile this driver as a module, choose M here: the
 +        module will be called sam-ba.
 +
  config USB_SERIAL_SIEMENS_MPI
        tristate "USB Siemens MPI driver"
        help
index 37b57c785cc730eca86e98fc4d01323d7579dc34,4fc588cc471696a1c4bcb941ee293618beeacc35..89a9a584780391d7ad6544440aecac540a3fc4f0
@@@ -177,11 -177,9 +177,11 @@@ static struct usb_device_id id_table_co
        { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_SNIFFER_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_THROTTLE_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GATEWAY_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_PID) },
        { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
        { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) },
 +      { USB_DEVICE(FTDI_VID, FTDI_LENZ_LIUSB_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_RRCIRKITS_LOCOBUFFER_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_ASK_RDR400_PID) },
        { USB_DEVICE(ICOM_ID1_VID, ICOM_ID1_PID) },
 -      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_TMU_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_ACG_HFDUAL_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_YEI_SERVOCENTER31_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_THORLABS_PID) },
                .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
        { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) },
        { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) },
 +
 +      /* Papouch devices based on FTDI chip */
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AP485_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB422_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485_2_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AP485_2_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB422_2_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485S_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485C_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_LEC_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB232_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_TMU_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_IRAMP_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_DRAK5_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO8x8_PID) },
        { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO2x2_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO10x1_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO30x3_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO60x3_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO2x16_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO3x32_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_DRAK6_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_UPSUSB_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_MU_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SIMUKEY_PID) },
        { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AD4USB_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_GMUX_PID) },
 +      { USB_DEVICE(PAPOUCH_VID, PAPOUCH_GMSR_PID) },
 +
        { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) },
        { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) },
        { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) },
        { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH4_PID),
                .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
        { USB_DEVICE(FTDI_VID, SEGWAY_RMP200_PID) },
 +      { USB_DEVICE(FTDI_VID, ACCESIO_COM4SM_PID) },
 +      { USB_DEVICE(IONICS_VID, IONICS_PLUGCOMPUTER_PID),
 +              .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
 +      { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_24_MASTER_WING_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_PC_WING_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_USB_DMX_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MIDI_TIMECODE_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MINI_WING_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MAXI_WING_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MEDIA_WING_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_WING_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LOGBOOKML_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) },
 +      { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) },
        { },                                    /* Optional parameter entry */
        { }                                     /* Terminating entry */
  };
@@@ -1420,7 -1376,7 +1420,7 @@@ static void ftdi_set_max_packet_size(st
        }
  
        /* set max packet size based on descriptor */
 -      priv->max_packet_size = ep_desc->wMaxPacketSize;
 +      priv->max_packet_size = le16_to_cpu(ep_desc->wMaxPacketSize);
  
        dev_info(&udev->dev, "Setting MaxPacketSize %d\n", priv->max_packet_size);
  }
@@@ -1592,7 -1548,6 +1592,7 @@@ static int ftdi_sio_port_probe(struct u
        ftdi_set_max_packet_size(port);
        if (read_latency_timer(port) < 0)
                priv->latency = 16;
 +      write_latency_timer(port);
        create_sysfs_attrs(port);
        return 0;
  }
@@@ -1721,6 -1676,8 +1721,6 @@@ static int ftdi_open(struct tty_struct 
  
        dbg("%s", __func__);
  
 -      write_latency_timer(port);
 -
        /* No error checking for this (will get errors later anyway) */
        /* See ftdi_sio.h for description of what is reset */
        usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
@@@ -1874,7 -1831,7 +1874,7 @@@ static int ftdi_process_packet(struct t
  
        if (port->port.console && port->sysrq) {
                for (i = 0; i < len; i++, ch++) {
 -                      if (!usb_serial_handle_sysrq_char(tty, port, *ch))
 +                      if (!usb_serial_handle_sysrq_char(port, *ch))
                                tty_insert_flip_char(tty, *ch, flag);
                }
        } else {
@@@ -2060,6 -2017,8 +2060,6 @@@ static void ftdi_set_termios(struct tty
                                "urb failed to set to rts/cts flow control\n");
                }
  
 -              /* raise DTR/RTS */
 -              set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
        } else {
                /*
                 * Xon/Xoff code
                        }
                }
  
 -              /* lower DTR/RTS */
 -              clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
        }
-       return;
  }
  
  static int ftdi_tiocmget(struct tty_struct *tty, struct file *file)
@@@ -2196,7 -2156,6 +2195,7 @@@ static int ftdi_ioctl(struct tty_struc
         * - mask passed in arg for lines of interest
         *   (use |'ed TIOCM_RNG/DSR/CD/CTS for masking)
         * Caller should use TIOCGICOUNT to see which one it was.
 +       * (except that the driver doesn't support it !)
         *
         * This code is borrowed from linux/drivers/char/serial.c
         */
index cf1aea1b9ee76eed5e64f701453c1e4d50f36f59,732ff2a2fa36fdad9cd3e4d4952cb518836aabac..7dfe02f1fb6a09b2763befdced18226e1b9c5365
@@@ -46,7 -46,7 +46,7 @@@
  #define FTDI_USINT_RS232_PID  0xb812  /* Navigator RS232 and CONFIG lines */
  
  /* OOCDlink by Joern Kaipf <joernk@web.de>
-  * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */
+  * (http://www.joernonline.de/) */
  #define FTDI_OOCDLINK_PID     0xbaf8  /* Amontec JTAGkey */
  
  /* Luminary Micro Stellaris Boards, VID = FTDI_VID */
@@@ -61,7 -61,6 +61,7 @@@
  #define FTDI_OPENDCC_SNIFFER_PID      0xBFD9
  #define FTDI_OPENDCC_THROTTLE_PID     0xBFDA
  #define FTDI_OPENDCC_GATEWAY_PID      0xBFDB
 +#define FTDI_OPENDCC_GBM_PID  0xBFDC
  
  /*
   * RR-CirKits LocoBuffer USB (http://www.rr-cirkits.com)
  /* Propox devices */
  #define FTDI_PROPOX_JTAGCABLEII_PID   0xD738
  
 +/* Lenz LI-USB Computer Interface. */
 +#define FTDI_LENZ_LIUSB_PID   0xD780
 +
  /*
   * Xsens Technologies BV products (http://www.xsens.com).
   */
  #define FTDI_NDI_FUTURE_3_PID         0xDA73  /* NDI future device #3 */
  #define FTDI_NDI_AURORA_SCU_PID               0xDA74  /* NDI Aurora SCU */
  
 +/*
 + * ChamSys Limited (www.chamsys.co.uk) USB wing/interface product IDs
 + */
 +#define FTDI_CHAMSYS_24_MASTER_WING_PID        0xDAF8
 +#define FTDI_CHAMSYS_PC_WING_PID       0xDAF9
 +#define FTDI_CHAMSYS_USB_DMX_PID       0xDAFA
 +#define FTDI_CHAMSYS_MIDI_TIMECODE_PID 0xDAFB
 +#define FTDI_CHAMSYS_MINI_WING_PID     0xDAFC
 +#define FTDI_CHAMSYS_MAXI_WING_PID     0xDAFD
 +#define FTDI_CHAMSYS_MEDIA_WING_PID    0xDAFE
 +#define FTDI_CHAMSYS_WING_PID  0xDAFF
 +
  /*
   * Westrex International devices submitted by Cory Lee
   */
  #define FTDI_PIEGROUP_PID     0xF208  /* Product Id */
  
  /* ACT Solutions HomePro ZWave interface
-    (http://www.act-solutions.com/HomePro.htm) */
+    (http://www.act-solutions.com/HomePro-Product-Matrix.html) */
  #define FTDI_ACTZWAVE_PID     0xF2D0
  
  /*
  #define FTDI_SUUNTO_SPORTS_PID        0xF680  /* Suunto Sports instrument */
  
  /* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */
- /* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */
+ /* http://www.usbuirt.com/ */
  #define FTDI_USB_UIRT_PID     0xF850  /* Product Id */
  
  /* CCS Inc. ICDU/ICDU40 product ID -
   */
  #define FTDI_HE_TIRA1_PID     0xFA78  /* Tira-1 IR transceiver */
  
- /* Inside Accesso contactless reader (http://www.insidefr.com) */
+ /* Inside Accesso contactless reader (http://www.insidecontactless.com/) */
  #define INSIDE_ACCESSO                0xFAD0
  
  /*
  
  /*
   * JETI SPECTROMETER SPECBOS 1201
-  * http://www.jeti.com/products/sys/scb/scb1201.php
+  * http://www.jeti.com/cms/index.php/instruments/other-instruments/specbos-2101
   */
  #define JETI_VID              0x0c6c
  #define JETI_SPC1201_PID      0x04b2
  
  /*
   * FTDI USB UART chips used in construction projects from the
-  * Elektor Electronics magazine (http://elektor-electronics.co.uk)
+  * Elektor Electronics magazine (http://www.elektor.com/)
   */
  #define ELEKTOR_VID           0x0C7D
  #define ELEKTOR_FT323R_PID    0x0005  /* RFID-Reader, issue 09-2006 */
  #define ALTI2_VID     0x1BC9
  #define ALTI2_N3_PID  0x6001  /* Neptune 3 */
  
 +/*
 + * Ionics PlugComputer
 + */
 +#define IONICS_VID                    0x1c0c
 +#define IONICS_PLUGCOMPUTER_PID               0x0102
 +
  /*
   * Dresden Elektronik Sensor Terminal Board
   */
   */
  
  #define PAPOUCH_VID                   0x5050  /* Vendor ID */
 +#define PAPOUCH_SB485_PID             0x0100  /* Papouch SB485 USB-485/422 Converter */
 +#define PAPOUCH_AP485_PID             0x0101  /* AP485 USB-RS485 Converter */
 +#define PAPOUCH_SB422_PID             0x0102  /* Papouch SB422 USB-RS422 Converter  */
 +#define PAPOUCH_SB485_2_PID           0x0103  /* Papouch SB485 USB-485/422 Converter */
 +#define PAPOUCH_AP485_2_PID           0x0104  /* AP485 USB-RS485 Converter */
 +#define PAPOUCH_SB422_2_PID           0x0105  /* Papouch SB422 USB-RS422 Converter  */
 +#define PAPOUCH_SB485S_PID            0x0106  /* Papouch SB485S USB-485/422 Converter */
 +#define PAPOUCH_SB485C_PID            0x0107  /* Papouch SB485C USB-485/422 Converter */
 +#define PAPOUCH_LEC_PID                       0x0300  /* LEC USB Converter */
 +#define PAPOUCH_SB232_PID             0x0301  /* Papouch SB232 USB-RS232 Converter */
  #define PAPOUCH_TMU_PID                       0x0400  /* TMU USB Thermometer */
 -#define PAPOUCH_QUIDO4x4_PID          0x0900  /* Quido 4/4 Module */
 +#define PAPOUCH_IRAMP_PID             0x0500  /* Papouch IRAmp Duplex */
 +#define PAPOUCH_DRAK5_PID             0x0700  /* Papouch DRAK5 */
 +#define PAPOUCH_QUIDO8x8_PID          0x0800  /* Papouch Quido 8/8 Module */
 +#define PAPOUCH_QUIDO4x4_PID          0x0900  /* Papouch Quido 4/4 Module */
 +#define PAPOUCH_QUIDO2x2_PID          0x0a00  /* Papouch Quido 2/2 Module */
 +#define PAPOUCH_QUIDO10x1_PID         0x0b00  /* Papouch Quido 10/1 Module */
 +#define PAPOUCH_QUIDO30x3_PID         0x0c00  /* Papouch Quido 30/3 Module */
 +#define PAPOUCH_QUIDO60x3_PID         0x0d00  /* Papouch Quido 60(100)/3 Module */
 +#define PAPOUCH_QUIDO2x16_PID         0x0e00  /* Papouch Quido 2/16 Module */
 +#define PAPOUCH_QUIDO3x32_PID         0x0f00  /* Papouch Quido 3/32 Module */
 +#define PAPOUCH_DRAK6_PID             0x1000  /* Papouch DRAK6 */
 +#define PAPOUCH_UPSUSB_PID            0x8000  /* Papouch UPS-USB adapter */
 +#define PAPOUCH_MU_PID                        0x8001  /* MU controller */
 +#define PAPOUCH_SIMUKEY_PID           0x8002  /* Papouch SimuKey */
  #define PAPOUCH_AD4USB_PID            0x8003  /* AD4USB Measurement Module */
 +#define PAPOUCH_GMUX_PID              0x8004  /* Papouch GOLIATH MUX */
 +#define PAPOUCH_GMSR_PID              0x8005  /* Papouch GOLIATH MSR */
  
  /*
   * Marvell SheevaPlug
   * Submitted by John G. Rogers
   */
  #define SEGWAY_RMP200_PID     0xe729
 +
 +
 +/*
 + * Accesio USB Data Acquisition products (http://www.accesio.com/)
 + */
 +#define ACCESIO_COM4SM_PID    0xD578
 +
 +/* www.sciencescope.co.uk educational dataloggers */
 +#define FTDI_SCIENCESCOPE_LOGBOOKML_PID               0xFF18
 +#define FTDI_SCIENCESCOPE_LS_LOGBOOK_PID      0xFF1C
 +#define FTDI_SCIENCESCOPE_HS_LOGBOOK_PID      0xFF1D
index a0ab78ada25e9667242c51ae009173ff6b06b8e2,892e916ef67e453b48efbb30604ca9323b2db353..cd769ef24f8a04b2bfb7d44ee852a22536f11a98
@@@ -222,8 -222,6 +222,8 @@@ static void edge_break(struct tty_struc
  static int  edge_tiocmget(struct tty_struct *tty, struct file *file);
  static int  edge_tiocmset(struct tty_struct *tty, struct file *file,
                                        unsigned int set, unsigned int clear);
 +static int  edge_get_icount(struct tty_struct *tty,
 +                              struct serial_icounter_struct *icount);
  static int  edge_startup(struct usb_serial *serial);
  static void edge_disconnect(struct usb_serial *serial);
  static void edge_release(struct usb_serial *serial);
@@@ -1467,8 -1465,6 +1467,6 @@@ static void edge_throttle(struct tty_st
                if (status != 0)
                        return;
        }
-       return;
  }
  
  
@@@ -1626,31 -1622,6 +1624,31 @@@ static int edge_tiocmget(struct tty_str
        return result;
  }
  
 +static int edge_get_icount(struct tty_struct *tty,
 +                              struct serial_icounter_struct *icount)
 +{
 +      struct usb_serial_port *port = tty->driver_data;
 +      struct edgeport_port *edge_port = usb_get_serial_port_data(port);
 +      struct async_icount cnow;
 +      cnow = edge_port->icount;
 +
 +      icount->cts = cnow.cts;
 +      icount->dsr = cnow.dsr;
 +      icount->rng = cnow.rng;
 +      icount->dcd = cnow.dcd;
 +      icount->rx = cnow.rx;
 +      icount->tx = cnow.tx;
 +      icount->frame = cnow.frame;
 +      icount->overrun = cnow.overrun;
 +      icount->parity = cnow.parity;
 +      icount->brk = cnow.brk;
 +      icount->buf_overrun = cnow.buf_overrun;
 +
 +      dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d",
 +                      __func__,  port->number, icount->rx, icount->tx);
 +      return 0;
 +}
 +
  static int get_serial_info(struct edgeport_port *edge_port,
                                struct serial_struct __user *retinfo)
  {
  }
  
  
 -
  /*****************************************************************************
   * SerialIoctl
   *    this function handles any ioctl calls to the driver
@@@ -1689,6 -1661,7 +1687,6 @@@ static int edge_ioctl(struct tty_struc
        struct edgeport_port *edge_port = usb_get_serial_port_data(port);
        struct async_icount cnow;
        struct async_icount cprev;
 -      struct serial_icounter_struct icount;
  
        dbg("%s - port %d, cmd = 0x%x", __func__, port->number, cmd);
  
                /* NOTREACHED */
                break;
  
 -      case TIOCGICOUNT:
 -              cnow = edge_port->icount;
 -              memset(&icount, 0, sizeof(icount));
 -              icount.cts = cnow.cts;
 -              icount.dsr = cnow.dsr;
 -              icount.rng = cnow.rng;
 -              icount.dcd = cnow.dcd;
 -              icount.rx = cnow.rx;
 -              icount.tx = cnow.tx;
 -              icount.frame = cnow.frame;
 -              icount.overrun = cnow.overrun;
 -              icount.parity = cnow.parity;
 -              icount.brk = cnow.brk;
 -              icount.buf_overrun = cnow.buf_overrun;
 -
 -              dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d",
 -                              __func__,  port->number, icount.rx, icount.tx);
 -              if (copy_to_user((void __user *)arg, &icount, sizeof(icount)))
 -                      return -EFAULT;
 -              return 0;
        }
        return -ENOIOCTLCMD;
  }
@@@ -1775,8 -1768,6 +1773,6 @@@ static void edge_break(struct tty_struc
                        dbg("%s - error sending break set/clear command.",
                                __func__);
        }
-       return;
  }
  
  
@@@ -2047,7 -2038,6 +2043,6 @@@ static void process_rcvd_status(struct 
                dbg("%s - Unrecognized IOSP status code %u", __func__, code);
                break;
        }
-       return;
  }
  
  
@@@ -2100,8 -2090,6 +2095,6 @@@ static void handle_new_msr(struct edgep
  
        /* Save the new modem status */
        edge_port->shadowMSR = newMsr & 0xf0;
-       return;
  }
  
  
@@@ -2148,8 -2136,6 +2141,6 @@@ static void handle_new_lsr(struct edgep
                icount->parity++;
        if (newLsr & LSR_FRM_ERR)
                icount->frame++;
-       return;
  }
  
  
@@@ -2725,7 -2711,6 +2716,6 @@@ static void change_port_settings(struc
                baud = tty_termios_baud_rate(old_termios);
                tty_encode_baud_rate(tty, baud, baud);
        }
-       return;
  }
  
  
@@@ -2927,7 -2912,6 +2917,6 @@@ static void load_application_firmware(s
                                    0x40, 0x4000, 0x0001, NULL, 0, 3000);
  
        release_firmware(fw);
-       return;
  }
  
  
index 4dad27a0f22a414971dbaf11282a52f9455085e2,9d6be304dff9c0b710a660204fa2f82b35d05ebe..22506b095c4f6e691ea60ae7cf2e0bf5d2593004
@@@ -1151,7 -1151,7 +1151,7 @@@ static int download_fw(struct edgeport_
  
                        /* Check if we have an old version in the I2C and
                           update if necessary */
 -                      if (download_cur_ver != download_new_ver) {
 +                      if (download_cur_ver < download_new_ver) {
                                dbg("%s - Update I2C dld from %d.%d to %d.%d",
                                    __func__,
                                    firmware_version->Ver_Major,
                                kfree(header);
                                kfree(rom_desc);
                                kfree(ti_manuf_desc);
 -                              return status;
 +                              return -EINVAL;
                        }
  
                        /* Update I2C with type 0xf2 record with correct
@@@ -1571,8 -1571,6 +1571,6 @@@ static void handle_new_msr(struct edgep
                }
        }
        tty_kref_put(tty);
-       return;
  }
  
  static void handle_new_lsr(struct edgeport_port *edge_port, int lsr_data,
@@@ -2424,7 -2422,6 +2422,6 @@@ static void change_port_settings(struc
                dbg("%s - error %d when trying to write config to device",
                     __func__, status);
        kfree(config);
-       return;
  }
  
  static void edge_set_termios(struct tty_struct *tty,
                return;
        /* change the port settings to the new ones specified */
        change_port_settings(tty, edge_port, old_termios);
-       return;
  }
  
  static int edge_tiocmset(struct tty_struct *tty, struct file *file,
@@@ -2510,27 -2506,6 +2506,27 @@@ static int edge_tiocmget(struct tty_str
        return result;
  }
  
 +static int edge_get_icount(struct tty_struct *tty,
 +                              struct serial_icounter_struct *icount)
 +{
 +      struct usb_serial_port *port = tty->driver_data;
 +      struct edgeport_port *edge_port = usb_get_serial_port_data(port);
 +      struct async_icount *ic = &edge_port->icount;
 +
 +      icount->cts = ic->cts;
 +      icount->dsr = ic->dsr;
 +      icount->rng = ic->rng;
 +      icount->dcd = ic->dcd;
 +      icount->tx = ic->tx;
 +        icount->rx = ic->rx;
 +        icount->frame = ic->frame;
 +        icount->parity = ic->parity;
 +        icount->overrun = ic->overrun;
 +        icount->brk = ic->brk;
 +        icount->buf_overrun = ic->buf_overrun;
 +      return 0;
 +}
 +
  static int get_serial_info(struct edgeport_port *edge_port,
                                struct serial_struct __user *retinfo)
  {
@@@ -2593,6 -2568,13 +2589,6 @@@ static int edge_ioctl(struct tty_struc
                }
                /* not reached */
                break;
 -      case TIOCGICOUNT:
 -              dbg("%s - (%d) TIOCGICOUNT RX=%d, TX=%d", __func__,
 -                   port->number, edge_port->icount.rx, edge_port->icount.tx);
 -              if (copy_to_user((void __user *)arg, &edge_port->icount,
 -                              sizeof(edge_port->icount)))
 -                      return -EFAULT;
 -              return 0;
        }
        return -ENOIOCTLCMD;
  }
@@@ -2772,7 -2754,6 +2768,7 @@@ static struct usb_serial_driver edgepor
        .set_termios            = edge_set_termios,
        .tiocmget               = edge_tiocmget,
        .tiocmset               = edge_tiocmset,
 +      .get_icount             = edge_get_icount,
        .write                  = edge_write,
        .write_room             = edge_write_room,
        .chars_in_buffer        = edge_chars_in_buffer,
index fd0b6414f45975e45a6a4d52bd1c887b7b945996,f442333dfa99720bb60cbe0aa482e9a38f5e289d..7d3bc9a3e2b6cab8b650f7814575d3bf1ee5460e
@@@ -827,7 -827,6 +827,6 @@@ exit
                dev_err(&urb->dev->dev,
                        "%s - Error %d submitting control urb\n",
                        __func__, result);
-       return;
  }
  
  /*
@@@ -907,7 -906,6 +906,6 @@@ exit
                dev_err(&urb->dev->dev,
                        "%s - Error %d submitting control urb\n",
                        __func__, result);
-       return;
  }
  
  /*
@@@ -1227,8 -1225,6 +1225,6 @@@ static void mos7720_break(struct tty_st
        mos7720_port->shadowLCR  = data;
        write_mos_reg(serial, port->number - port->serial->minor,
                      LCR, mos7720_port->shadowLCR);
-       return;
  }
  
  /*
@@@ -1746,7 -1742,6 +1742,6 @@@ static void change_port_settings(struc
                        dbg("usb_submit_urb(read bulk) failed, status = %d",
                            status);
        }
-       return;
  }
  
  /*
@@@ -1803,7 -1798,6 +1798,6 @@@ static void mos7720_set_termios(struct 
                        dbg("usb_submit_urb(read bulk) failed, status = %d",
                            status);
        }
-       return;
  }
  
  /*
@@@ -1896,37 -1890,10 +1890,37 @@@ static int mos7720_tiocmset(struct tty_
        return 0;
  }
  
 +static int mos7720_get_icount(struct tty_struct *tty,
 +                              struct serial_icounter_struct *icount)
 +{
 +      struct usb_serial_port *port = tty->driver_data;
 +      struct moschip_port *mos7720_port;
 +      struct async_icount cnow;
 +
 +      mos7720_port = usb_get_serial_port_data(port);
 +      cnow = mos7720_port->icount;
 +
 +      icount->cts = cnow.cts;
 +      icount->dsr = cnow.dsr;
 +      icount->rng = cnow.rng;
 +      icount->dcd = cnow.dcd;
 +      icount->rx = cnow.rx;
 +      icount->tx = cnow.tx;
 +      icount->frame = cnow.frame;
 +      icount->overrun = cnow.overrun;
 +      icount->parity = cnow.parity;
 +      icount->brk = cnow.brk;
 +      icount->buf_overrun = cnow.buf_overrun;
 +
 +      dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d", __func__,
 +              port->number, icount->rx, icount->tx);
 +      return 0;
 +}
 +
  static int set_modem_info(struct moschip_port *mos7720_port, unsigned int cmd,
                          unsigned int __user *value)
  {
 -      unsigned int mcr ;
 +      unsigned int mcr;
        unsigned int arg;
  
        struct usb_serial_port *port;
@@@ -2000,6 -1967,7 +1994,6 @@@ static int mos7720_ioctl(struct tty_str
        struct moschip_port *mos7720_port;
        struct async_icount cnow;
        struct async_icount cprev;
 -      struct serial_icounter_struct icount;
  
        mos7720_port = usb_get_serial_port_data(port);
        if (mos7720_port == NULL)
                }
                /* NOTREACHED */
                break;
 -
 -      case TIOCGICOUNT:
 -              cnow = mos7720_port->icount;
 -              icount.cts = cnow.cts;
 -              icount.dsr = cnow.dsr;
 -              icount.rng = cnow.rng;
 -              icount.dcd = cnow.dcd;
 -              icount.rx = cnow.rx;
 -              icount.tx = cnow.tx;
 -              icount.frame = cnow.frame;
 -              icount.overrun = cnow.overrun;
 -              icount.parity = cnow.parity;
 -              icount.brk = cnow.brk;
 -              icount.buf_overrun = cnow.buf_overrun;
 -
 -              dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d", __func__,
 -                  port->number, icount.rx, icount.tx);
 -              if (copy_to_user((void __user *)arg, &icount, sizeof(icount)))
 -                      return -EFAULT;
 -              return 0;
        }
  
        return -ENOIOCTLCMD;
@@@ -2215,7 -2203,6 +2209,7 @@@ static struct usb_serial_driver moschip
        .ioctl                  = mos7720_ioctl,
        .tiocmget               = mos7720_tiocmget,
        .tiocmset               = mos7720_tiocmset,
 +      .get_icount             = mos7720_get_icount,
        .set_termios            = mos7720_set_termios,
        .write                  = mos7720_write,
        .write_room             = mos7720_write_room,
index 93dad5853cd5f3ac9188885af1f005cdf39e17e3,d3fc30c5959d21e771886bde4eeb244ccbc08d5d..5627993f9e418a33fa064db6161d553c005476ee
   * by making a change here, in moschip_port_id_table, and in
   * moschip_id_table_combined
   */
 -#define USB_VENDOR_ID_BANDB             0x0856
 -#define BANDB_DEVICE_ID_USO9ML2_2     0xAC22
 -#define BANDB_DEVICE_ID_USO9ML2_4     0xAC24
 -#define BANDB_DEVICE_ID_US9ML2_2      0xAC29
 -#define BANDB_DEVICE_ID_US9ML2_4      0xAC30
 -#define BANDB_DEVICE_ID_USPTL4_2      0xAC31
 -#define BANDB_DEVICE_ID_USPTL4_4      0xAC32
 -#define BANDB_DEVICE_ID_USOPTL4_2     0xAC42
 -#define BANDB_DEVICE_ID_USOPTL4_4     0xAC44
 -#define BANDB_DEVICE_ID_USOPTL2_4     0xAC24
 +#define USB_VENDOR_ID_BANDB              0x0856
 +#define BANDB_DEVICE_ID_USO9ML2_2        0xAC22
 +#define BANDB_DEVICE_ID_USO9ML2_2P       0xBC00
 +#define BANDB_DEVICE_ID_USO9ML2_4        0xAC24
 +#define BANDB_DEVICE_ID_USO9ML2_4P       0xBC01
 +#define BANDB_DEVICE_ID_US9ML2_2         0xAC29
 +#define BANDB_DEVICE_ID_US9ML2_4         0xAC30
 +#define BANDB_DEVICE_ID_USPTL4_2         0xAC31
 +#define BANDB_DEVICE_ID_USPTL4_4         0xAC32
 +#define BANDB_DEVICE_ID_USOPTL4_2        0xAC42
 +#define BANDB_DEVICE_ID_USOPTL4_2P       0xBC02
 +#define BANDB_DEVICE_ID_USOPTL4_4        0xAC44
 +#define BANDB_DEVICE_ID_USOPTL4_4P       0xBC03
 +#define BANDB_DEVICE_ID_USOPTL2_4        0xAC24
  
  /* This driver also supports
   * ATEN UC2324 device using Moschip MCS7840
@@@ -188,17 -184,13 +188,17 @@@ static const struct usb_device_id mosch
        {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)},
        {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)},
 +      {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2P)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)},
 +      {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4P)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_2)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_4)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_2)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_4)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)},
 +      {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2P)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)},
 +      {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4P)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL2_4)},
        {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)},
        {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)},
@@@ -209,17 -201,13 +209,17 @@@ static const struct usb_device_id mosch
        {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)},
        {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)},
 +      {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2P)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)},
 +      {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4P)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_2)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_4)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_2)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_4)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)},
 +      {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2P)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)},
 +      {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4P)},
        {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL2_4)},
        {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)},
        {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)},
@@@ -1367,8 -1355,6 +1367,6 @@@ static void mos7840_break(struct tty_st
            mos7840_port->shadowLCR);
        mos7840_set_uart_reg(port, LINE_CONTROL_REGISTER,
                             mos7840_port->shadowLCR);
-       return;
  }
  
  /*****************************************************************************
@@@ -1599,8 -1585,6 +1597,6 @@@ static void mos7840_throttle(struct tty
                if (status < 0)
                        return;
        }
-       return;
  }
  
  /*****************************************************************************
@@@ -2075,8 -2059,6 +2071,6 @@@ static void mos7840_change_port_setting
        mos7840_port->delta_msr_cond = 1;
        dbg("mos7840_change_port_settings mos7840_port->shadowLCR is End %x",
            mos7840_port->shadowLCR);
-       return;
  }
  
  /*****************************************************************************
@@@ -2145,7 -2127,6 +2139,6 @@@ static void mos7840_set_termios(struct 
                        mos7840_port->read_urb_busy = false;
                }
        }
-       return;
  }
  
  /*****************************************************************************
@@@ -2209,34 -2190,6 +2202,34 @@@ static int mos7840_get_serial_info(stru
        return 0;
  }
  
 +static int mos7840_get_icount(struct tty_struct *tty,
 +                      struct serial_icounter_struct *icount)
 +{
 +      struct usb_serial_port *port = tty->driver_data;
 +      struct moschip_port *mos7840_port;
 +      struct async_icount cnow;
 +
 +      mos7840_port = mos7840_get_port_private(port);
 +      cnow = mos7840_port->icount;
 +
 +      smp_rmb();
 +      icount->cts = cnow.cts;
 +      icount->dsr = cnow.dsr;
 +      icount->rng = cnow.rng;
 +      icount->dcd = cnow.dcd;
 +      icount->rx = cnow.rx;
 +      icount->tx = cnow.tx;
 +      icount->frame = cnow.frame;
 +      icount->overrun = cnow.overrun;
 +      icount->parity = cnow.parity;
 +      icount->brk = cnow.brk;
 +      icount->buf_overrun = cnow.buf_overrun;
 +
 +      dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d", __func__,
 +              port->number, icount->rx, icount->tx);
 +      return 0;
 +}
 +
  /*****************************************************************************
   * SerialIoctl
   *    this function handles any ioctl calls to the driver
@@@ -2251,6 -2204,7 +2244,6 @@@ static int mos7840_ioctl(struct tty_str
  
        struct async_icount cnow;
        struct async_icount cprev;
 -      struct serial_icounter_struct icount;
  
        if (mos7840_port_paranoia_check(port, __func__)) {
                dbg("%s", "Invalid port");
                /* NOTREACHED */
                break;
  
 -      case TIOCGICOUNT:
 -              cnow = mos7840_port->icount;
 -              smp_rmb();
 -              icount.cts = cnow.cts;
 -              icount.dsr = cnow.dsr;
 -              icount.rng = cnow.rng;
 -              icount.dcd = cnow.dcd;
 -              icount.rx = cnow.rx;
 -              icount.tx = cnow.tx;
 -              icount.frame = cnow.frame;
 -              icount.overrun = cnow.overrun;
 -              icount.parity = cnow.parity;
 -              icount.brk = cnow.brk;
 -              icount.buf_overrun = cnow.buf_overrun;
 -
 -              dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d", __func__,
 -                  port->number, icount.rx, icount.tx);
 -              if (copy_to_user(argp, &icount, sizeof(icount)))
 -                      return -EFAULT;
 -              return 0;
        default:
                break;
        }
@@@ -2678,7 -2652,6 +2671,7 @@@ static struct usb_serial_driver moschip
        .break_ctl = mos7840_break,
        .tiocmget = mos7840_tiocmget,
        .tiocmset = mos7840_tiocmset,
 +      .get_icount = mos7840_get_icount,
        .attach = mos7840_startup,
        .disconnect = mos7840_disconnect,
        .release = mos7840_release,
index f2767cf2e229d4bc0868c3c0695982448a77407f,b356e1565db602b8d690d6d350674003e58a6132..49a489e0371616ee2452c30d6c85defd916a53ea
@@@ -36,7 -36,7 +36,7 @@@ config USB_STORAGE_DATAFA
        depends on USB_STORAGE
        help
          Support for certain Datafab CompactFlash readers.
-         Datafab has a web page at <http://www.datafabusa.com/>.
+         Datafab has a web page at <http://www.datafab.com/>.
  
          If this driver is compiled as a module, it will be named ums-datafab.
  
@@@ -172,19 -172,6 +172,19 @@@ config USB_STORAGE_CYPRESS_ATAC
  
          If this driver is compiled as a module, it will be named ums-cypress.
  
 +config USB_UAS
 +      tristate "USB Attached SCSI"
 +      depends on USB && SCSI
 +      help
 +        The USB Attached SCSI protocol is supported by some USB
 +        storage devices.  It permits higher performance by supporting
 +        multiple outstanding commands.
 +
 +        If you don't know whether you have a UAS device, it is safe to
 +        say 'Y' or 'M' here and the kernel will use the right driver.
 +
 +        If you compile this driver as a module, it will be named uas.
 +
  config USB_LIBUSUAL
        bool "The shared table of common (or usual) storage devices"
        depends on USB
diff --combined drivers/video/Kconfig
index 8b31fdfefc98a69e7de101cacce2bbe6570a170f,d4979f3f77fb58007cf55bc90c6bd378a771b197..dc06ff13455921f2d23748be845d6b51e3a92309
@@@ -49,7 -49,7 +49,7 @@@ menuconfig F
          You need an utility program called fbset to make full use of frame
          buffer devices. Please read <file:Documentation/fb/framebuffer.txt>
          and the Framebuffer-HOWTO at
-         <http://www.munted.org.uk/programming/Framebuffer-HOWTO-1.2.html> for more
+         <http://www.munted.org.uk/programming/Framebuffer-HOWTO-1.3.html> for more
          information.
  
          Say Y here and to the driver for your graphics board below if you
@@@ -955,7 -955,7 +955,7 @@@ config FB_EPSON135
          Build in support for the SED1355 Epson Research Embedded RAMDAC
          LCD/CRT Controller (since redesignated as the S1D13505) as a
          framebuffer.  Product specs at
-         <http://www.erd.epson.com/vdc/html/products.htm>.
+         <http://vdc.epson.com/>.
  
  config FB_S1D13XXX
        tristate "Epson S1D13XXX framebuffer support"
        help
          Support for S1D13XXX framebuffer device family (currently only
          working with S1D13806). Product specs at
-         <http://www.erd.epson.com/vdc/html/legacy_13xxx.htm>
+         <http://vdc.epson.com/>
  
  config FB_ATMEL
        tristate "AT91/AT32 LCD Controller support"
@@@ -1323,7 -1323,7 +1323,7 @@@ config FB_RADEO
          don't need to choose this to run the Radeon in plain VGA mode.
  
          There is a product page at
-         http://apps.ati.com/ATIcompare/
+         http://products.amd.com/en-us/GraphicCardResult.aspx
  
  config FB_RADEON_I2C
        bool "DDC/I2C for ATI Radeon support"
@@@ -1395,7 -1395,7 +1395,7 @@@ config FB_ATY_C
          Say Y here to support use of ATI's 64-bit Rage boards (or other
          boards based on the Mach64 CT, VT, GT, and LT chipsets) as a
          framebuffer device.  The ATI product support page for these boards
-         is at <http://support.ati.com/products/pc/mach64/>.
+         is at <http://support.ati.com/products/pc/mach64/mach64.html>.
  
  config FB_ATY_GENERIC_LCD
        bool "Mach64 generic LCD support (EXPERIMENTAL)"
@@@ -1896,13 -1896,6 +1896,13 @@@ config FB_W10
  
          If unsure, say N.
  
 +config SH_MIPI_DSI
 +      tristate
 +      depends on (SUPERH || ARCH_SHMOBILE) && HAVE_CLK
 +
 +config SH_LCD_MIPI_DSI
 +      bool
 +
  config FB_SH_MOBILE_LCDC
        tristate "SuperH Mobile LCDC framebuffer support"
        depends on FB && (SUPERH || ARCH_SHMOBILE) && HAVE_CLK
        select FB_SYS_IMAGEBLIT
        select FB_SYS_FOPS
        select FB_DEFERRED_IO
 +      select SH_MIPI_DSI if SH_LCD_MIPI_DSI
        ---help---
          Frame buffer driver for the on-chip SH-Mobile LCD controller.
  
 +config FB_SH_MOBILE_HDMI
 +      tristate "SuperH Mobile HDMI controller support"
 +      depends on FB_SH_MOBILE_LCDC
 +      select FB_MODE_HELPERS
 +      ---help---
 +        Driver for the on-chip SH-Mobile HDMI controller.
 +
  config FB_TMIO
        tristate "Toshiba Mobile IO FrameBuffer support"
        depends on FB && MFD_CORE
@@@ -1946,7 -1931,7 +1946,7 @@@ config FB_TMIO_ACCEL
  
  config FB_S3C
        tristate "Samsung S3C framebuffer support"
 -      depends on FB && ARCH_S3C64XX
 +      depends on FB && S3C_DEV_FB
        select FB_CFB_FILLRECT
        select FB_CFB_COPYAREA
        select FB_CFB_IMAGEBLIT
diff --combined fs/exofs/inode.c
index 3eadd97324b140e679f269480b3737823fd008cb,185ef1281e0cf8d1c0db0df27e4299c20aca96bb..44602754f758c903f9e201206afecbbbb4fad3e4
@@@ -32,6 -32,9 +32,6 @@@
   */
  
  #include <linux/slab.h>
 -#include <linux/writeback.h>
 -#include <linux/buffer_head.h>
 -#include <scsi/scsi_device.h>
  
  #include "exofs.h"
  
@@@ -54,9 -57,6 +54,9 @@@ struct page_collect 
        unsigned nr_pages;
        unsigned long length;
        loff_t pg_first; /* keep 64bit also in 32-arches */
 +      bool read_4_write; /* This means two things: that the read is sync
 +                          * And the pages should not be unlocked.
 +                          */
  };
  
  static void _pcol_init(struct page_collect *pcol, unsigned expected_pages,
@@@ -74,7 -74,6 +74,7 @@@
        pcol->nr_pages = 0;
        pcol->length = 0;
        pcol->pg_first = -1;
 +      pcol->read_4_write = false;
  }
  
  static void _pcol_reset(struct page_collect *pcol)
@@@ -351,8 -350,7 +351,8 @@@ static int readpage_strip(void *data, s
                if (PageError(page))
                        ClearPageError(page);
  
 -              unlock_page(page);
 +              if (!pcol->read_4_write)
 +                      unlock_page(page);
                EXOFS_DBGMSG("readpage_strip(0x%lx, 0x%lx) empty page,"
                             " splitting\n", inode->i_ino, page->index);
  
@@@ -433,7 -431,6 +433,7 @@@ static int _readpage(struct page *page
        /* readpage_strip might call read_exec(,is_sync==false) at several
         * places but not if we have a single page.
         */
 +      pcol.read_4_write = is_sync;
        ret = readpage_strip(&pcol, page);
        if (ret) {
                EXOFS_ERR("_readpage => %d\n", ret);
@@@ -511,7 -508,7 +511,7 @@@ static int write_exec(struct page_colle
  
        pcol_copy = kmalloc(sizeof(*pcol_copy), GFP_KERNEL);
        if (!pcol_copy) {
-               EXOFS_ERR("write_exec: Faild to kmalloc(pcol)\n");
+               EXOFS_ERR("write_exec: Failed to kmalloc(pcol)\n");
                ret = -ENOMEM;
                goto err;
        }
  
        ret = exofs_oi_write(oi, ios);
        if (unlikely(ret)) {
-               EXOFS_ERR("write_exec: exofs_oi_write() Faild\n");
+               EXOFS_ERR("write_exec: exofs_oi_write() Failed\n");
                goto err;
        }
  
@@@ -628,7 -625,7 +628,7 @@@ try_again
                /* split the request, next loop will start again */
                ret = write_exec(pcol);
                if (unlikely(ret)) {
-                       EXOFS_DBGMSG("write_exec faild => %d", ret);
+                       EXOFS_DBGMSG("write_exec failed => %d", ret);
                        goto fail;
                }
  
@@@ -719,7 -716,7 +719,7 @@@ int exofs_write_begin(struct file *file
                ret = simple_write_begin(file, mapping, pos, len, flags, pagep,
                                         fsdata);
                if (ret) {
-                       EXOFS_DBGMSG("simple_write_begin faild\n");
+                       EXOFS_DBGMSG("simple_write_begin failed\n");
                        goto out;
                }
  
                if (ret) {
                        /*SetPageError was done by _readpage. Is it ok?*/
                        unlock_page(page);
-                       EXOFS_DBGMSG("__readpage_filler faild\n");
+                       EXOFS_DBGMSG("__readpage_filler failed\n");
                }
        }
  out:
@@@ -776,13 -773,15 +776,13 @@@ static int exofs_releasepage(struct pag
  {
        EXOFS_DBGMSG("page 0x%lx\n", page->index);
        WARN_ON(1);
 -      return try_to_free_buffers(page);
 +      return 0;
  }
  
  static void exofs_invalidatepage(struct page *page, unsigned long offset)
  {
 -      EXOFS_DBGMSG("page_has_buffers=>%d\n", page_has_buffers(page));
 +      EXOFS_DBGMSG("page 0x%lx offset 0x%lx\n", page->index, offset);
        WARN_ON(1);
 -
 -      block_invalidatepage(page, offset);
  }
  
  const struct address_space_operations exofs_aops = {
@@@ -1095,7 -1094,7 +1095,7 @@@ static void create_done(struct exofs_io
        atomic_dec(&sbi->s_curr_pending);
  
        if (unlikely(ret)) {
-               EXOFS_ERR("object=0x%llx creation faild in pid=0x%llx",
+               EXOFS_ERR("object=0x%llx creation failed in pid=0x%llx",
                          _LLU(exofs_oi_objno(oi)), _LLU(sbi->layout.s_pid));
                /*TODO: When FS is corrupted creation can fail, object already
                 * exist. Get rid of this asynchronous creation, if exist
@@@ -1215,7 -1214,7 +1215,7 @@@ static int exofs_update_inode(struct in
  
        args = kzalloc(sizeof(*args), GFP_KERNEL);
        if (!args) {
-               EXOFS_DBGMSG("Faild kzalloc of args\n");
+               EXOFS_DBGMSG("Failed kzalloc of args\n");
                return -ENOMEM;
        }
  
diff --combined fs/exofs/ios.c
index 6550bf70e41d8a69dc17b071b4f1073174d955f0,908cdbe4b99ae8e1054a563f94a479ad1b2b45c8..f74a2ec027a643cf9685840fe4a148ab444335d1
@@@ -55,7 -55,7 +55,7 @@@ int exofs_read_kern(struct osd_dev *od
  
        ret = osd_finalize_request(or, 0, cred, NULL);
        if (unlikely(ret)) {
-               EXOFS_DBGMSG("Faild to osd_finalize_request() => %d\n", ret);
+               EXOFS_DBGMSG("Failed to osd_finalize_request() => %d\n", ret);
                goto out;
        }
  
@@@ -79,7 -79,7 +79,7 @@@ int exofs_get_io_state(struct exofs_lay
         */
        ios = kzalloc(exofs_io_state_size(layout->s_numdevs), GFP_KERNEL);
        if (unlikely(!ios)) {
-               EXOFS_DBGMSG("Faild kzalloc bytes=%d\n",
+               EXOFS_DBGMSG("Failed kzalloc bytes=%d\n",
                             exofs_io_state_size(layout->s_numdevs));
                *pios = NULL;
                return -ENOMEM;
@@@ -172,7 -172,7 +172,7 @@@ static int exofs_io_execute(struct exof
  
                ret = osd_finalize_request(or, 0, ios->cred, NULL);
                if (unlikely(ret)) {
-                       EXOFS_DBGMSG("Faild to osd_finalize_request() => %d\n",
+                       EXOFS_DBGMSG("Failed to osd_finalize_request() => %d\n",
                                     ret);
                        return ret;
                }
@@@ -305,6 -305,8 +305,6 @@@ int exofs_check_io(struct exofs_io_stat
  struct _striping_info {
        u64 obj_offset;
        u64 group_length;
 -      u64 total_group_length;
 -      u64 Major;
        unsigned dev;
        unsigned unit_off;
  };
@@@ -341,6 -343,8 +341,6 @@@ static void _calc_stripe_info(struct ex
                                  (M * group_depth * stripe_unit);
  
        si->group_length = T - H;
 -      si->total_group_length = T;
 -      si->Major = M;
  }
  
  static int _add_stripe_unit(struct exofs_io_state *ios,  unsigned *cur_pg,
  
                per_dev->bio = bio_kmalloc(GFP_KERNEL, bio_size);
                if (unlikely(!per_dev->bio)) {
-                       EXOFS_DBGMSG("Faild to allocate BIO size=%u\n",
+                       EXOFS_DBGMSG("Failed to allocate BIO size=%u\n",
                                     bio_size);
                        return -ENOMEM;
                }
  }
  
  static int _prepare_one_group(struct exofs_io_state *ios, u64 length,
 -                            struct _striping_info *si, unsigned first_comp)
 +                            struct _striping_info *si)
  {
        unsigned stripe_unit = ios->layout->stripe_unit;
        unsigned mirrors_p1 = ios->layout->mirrors_p1;
        unsigned devs_in_group = ios->layout->group_width * mirrors_p1;
        unsigned dev = si->dev;
        unsigned first_dev = dev - (dev % devs_in_group);
 -      unsigned comp = first_comp + (dev - first_dev);
        unsigned max_comp = ios->numdevs ? ios->numdevs - mirrors_p1 : 0;
        unsigned cur_pg = ios->pages_consumed;
        int ret = 0;
  
        while (length) {
 -              struct exofs_per_dev_state *per_dev = &ios->per_dev[comp];
 +              struct exofs_per_dev_state *per_dev = &ios->per_dev[dev];
                unsigned cur_len, page_off = 0;
  
                if (!per_dev->length) {
                                cur_len = stripe_unit;
                        }
  
 -                      if (max_comp < comp)
 -                              max_comp = comp;
 -
 -                      dev += mirrors_p1;
 -                      dev = (dev % devs_in_group) + first_dev;
 +                      if (max_comp < dev)
 +                              max_comp = dev;
                } else {
                        cur_len = stripe_unit;
                }
                if (unlikely(ret))
                        goto out;
  
 -              comp += mirrors_p1;
 -              comp = (comp % devs_in_group) + first_comp;
 +              dev += mirrors_p1;
 +              dev = (dev % devs_in_group) + first_dev;
  
                length -= cur_len;
        }
@@@ -446,15 -454,18 +446,15 @@@ out
  static int _prepare_for_striping(struct exofs_io_state *ios)
  {
        u64 length = ios->length;
 +      u64 offset = ios->offset;
        struct _striping_info si;
 -      unsigned devs_in_group = ios->layout->group_width *
 -                               ios->layout->mirrors_p1;
 -      unsigned first_comp = 0;
        int ret = 0;
  
 -      _calc_stripe_info(ios, ios->offset, &si);
 -
        if (!ios->pages) {
                if (ios->kern_buff) {
                        struct exofs_per_dev_state *per_dev = &ios->per_dev[0];
  
 +                      _calc_stripe_info(ios, ios->offset, &si);
                        per_dev->offset = si.obj_offset;
                        per_dev->dev = si.dev;
  
        }
  
        while (length) {
 +              _calc_stripe_info(ios, offset, &si);
 +
                if (length < si.group_length)
                        si.group_length = length;
  
 -              ret = _prepare_one_group(ios, si.group_length, &si, first_comp);
 +              ret = _prepare_one_group(ios, si.group_length, &si);
                if (unlikely(ret))
                        goto out;
  
 +              offset += si.group_length;
                length -= si.group_length;
 -
 -              si.group_length = si.total_group_length;
 -              si.unit_off = 0;
 -              ++si.Major;
 -              si.obj_offset = si.Major * ios->layout->stripe_unit *
 -                                              ios->layout->group_depth;
 -
 -              si.dev = (si.dev - (si.dev % devs_in_group)) + devs_in_group;
 -              si.dev %= ios->layout->s_numdevs;
 -
 -              first_comp += devs_in_group;
 -              first_comp %= ios->layout->s_numdevs;
        }
  
  out:
@@@ -564,7 -584,7 +564,7 @@@ static int _sbi_write_mirror(struct exo
                                                  master_dev->bio->bi_max_vecs);
                                if (unlikely(!bio)) {
                                        EXOFS_DBGMSG(
-                                             "Faild to allocate BIO size=%u\n",
+                                             "Failed to allocate BIO size=%u\n",
                                              master_dev->bio->bi_max_vecs);
                                        ret = -ENOMEM;
                                        goto out;
diff --combined fs/partitions/ldm.c
index 5bf8a04b5d9b5159881ab2fe26ec0640d51dce7b,e55fefcb0dcc5c0dd12bf43014265e683b3ca9a5..789c625c7aa56e1c4b64dd3d483aca22e2c8fb29
@@@ -5,7 -5,7 +5,7 @@@
   * Copyright (c) 2001-2007 Anton Altaparmakov
   * Copyright (C) 2001,2002 Jakob Kemi <jakob.kemi@telia.com>
   *
-  * Documentation is available at http://www.linux-ntfs.org/content/view/19/37/
+  * Documentation is available at http://www.linux-ntfs.org/doku.php?id=downloads 
   *
   * This program is free software; you can redistribute it and/or modify it under
   * the terms of the GNU General Public License as published by the Free Software
@@@ -643,7 -643,7 +643,7 @@@ static bool ldm_create_data_partitions 
                return false;
        }
  
 -      printk (" [LDM]");
 +      strlcat(pp->pp_buf, " [LDM]", PAGE_SIZE);
  
        /* Create the data partitions */
        list_for_each (item, &ldb->v_part) {
                part_num++;
        }
  
 -      printk ("\n");
 +      strlcat(pp->pp_buf, "\n", PAGE_SIZE);
        return true;
  }
  
diff --combined include/linux/idr.h
index cdb715e58e3e6de8b2e60485e31ce79ea99da8f4,88607523e2df9dd61c97c2e3802177a8750372d5..928ae712709faa041160a1a4a2f45ad5dcf1baf3
  
  struct idr_layer {
        unsigned long            bitmap; /* A zero bit means "space here" */
 -      struct idr_layer        *ary[1<<IDR_BITS];
 +      struct idr_layer __rcu  *ary[1<<IDR_BITS];
        int                      count;  /* When zero, we can release it */
        int                      layer;  /* distance from leaf */
        struct rcu_head          rcu_head;
  };
  
  struct idr {
 -      struct idr_layer *top;
 +      struct idr_layer __rcu *top;
        struct idr_layer *id_free;
        int               layers; /* only valid without concurrent changes */
        int               id_free_cnt;
@@@ -117,10 -117,13 +117,13 @@@ void idr_init(struct idr *idp)
  /*
   * IDA - IDR based id allocator, use when translation from id to
   * pointer isn't necessary.
+  *
+  * IDA_BITMAP_LONGS is calculated to be one less to accommodate
+  * ida_bitmap->nr_busy so that the whole struct fits in 128 bytes.
   */
  #define IDA_CHUNK_SIZE                128     /* 128 bytes per chunk */
- #define IDA_BITMAP_LONGS      (128 / sizeof(long) - 1)
- #define IDA_BITMAP_BITS               (IDA_BITMAP_LONGS * sizeof(long) * 8)
+ #define IDA_BITMAP_LONGS      (IDA_CHUNK_SIZE / sizeof(long) - 1)
+ #define IDA_BITMAP_BITS       (IDA_BITMAP_LONGS * sizeof(long) * 8)
  
  struct ida_bitmap {
        long                    nr_busy;
diff --combined init/Kconfig
index fdfd97efe0e01a2a1011dbd43f0cf60fcaad74ce,2eec20cbe8eff437c751365a80c622dca5fe4464..3ae8ffe738eb4878d9d1fe383e36279026d396e0
@@@ -21,13 -21,6 +21,13 @@@ config CONSTRUCTOR
        depends on !UML
        default y
  
 +config HAVE_IRQ_WORK
 +      bool
 +
 +config IRQ_WORK
 +      bool
 +      depends on HAVE_IRQ_WORK
 +
  menu "General setup"
  
  config EXPERIMENTAL
@@@ -71,7 -64,7 +71,7 @@@ config BROKEN_ON_SM
  
  config LOCK_KERNEL
        bool
 -      depends on SMP || PREEMPT
 +      depends on (SMP || PREEMPT) && BKL
        default y
  
  config INIT_ENV_ARG_LIMIT
@@@ -186,7 -179,7 +186,7 @@@ config KERNEL_LZ
        depends on HAVE_KERNEL_LZO
        help
          Its compression ratio is the poorest among the 4. The kernel
-         size is about about 10% bigger than gzip; however its speed
+         size is about 10% bigger than gzip; however its speed
          (both compression and decompression) is the fastest.
  
  endchoice
@@@ -339,8 -332,6 +339,8 @@@ config AUDIT_TRE
        depends on AUDITSYSCALL
        select FSNOTIFY
  
 +source "kernel/irq/Kconfig"
 +
  menu "RCU Subsystem"
  
  choice
  
  config TREE_RCU
        bool "Tree-based hierarchical RCU"
 +      depends on !PREEMPT && SMP
        help
          This option selects the RCU implementation that is
          designed for very large SMP system with hundreds or
          smaller systems.
  
  config TREE_PREEMPT_RCU
 -      bool "Preemptable tree-based hierarchical RCU"
 +      bool "Preemptible tree-based hierarchical RCU"
        depends on PREEMPT
        help
          This option selects the RCU implementation that is
@@@ -375,22 -365,8 +375,22 @@@ config TINY_RC
          is not required.  This option greatly reduces the
          memory footprint of RCU.
  
 +config TINY_PREEMPT_RCU
 +      bool "Preemptible UP-only small-memory-footprint RCU"
 +      depends on !SMP && PREEMPT
 +      help
 +        This option selects the RCU implementation that is designed
 +        for real-time UP systems.  This option greatly reduces the
 +        memory footprint of RCU.
 +
  endchoice
  
 +config PREEMPT_RCU
 +      def_bool ( TREE_PREEMPT_RCU || TINY_PREEMPT_RCU )
 +      help
 +        This option enables preemptible-RCU code that is common between
 +        the TREE_PREEMPT_RCU and TINY_PREEMPT_RCU implementations.
 +
  config RCU_TRACE
        bool "Enable tracing for RCU"
        depends on TREE_RCU || TREE_PREEMPT_RCU
@@@ -411,12 -387,9 +411,12 @@@ config RCU_FANOU
        help
          This option controls the fanout of hierarchical implementations
          of RCU, allowing RCU to work efficiently on machines with
 -        large numbers of CPUs.  This value must be at least the cube
 -        root of NR_CPUS, which allows NR_CPUS up to 32,768 for 32-bit
 -        systems and up to 262,144 for 64-bit systems.
 +        large numbers of CPUs.  This value must be at least the fourth
 +        root of NR_CPUS, which allows NR_CPUS to be insanely large.
 +        The default value of RCU_FANOUT should be used for production
 +        systems, but if you are stress-testing the RCU implementation
 +        itself, small RCU_FANOUT values allow you to test large-system
 +        code paths on small(er) systems.
  
          Select a specific number if testing RCU itself.
          Take the default if unsure.
@@@ -604,8 -577,8 +604,8 @@@ config CGROUP_MEM_RES_CTL
          could in turn add some fork/exit overhead.
  
  config CGROUP_MEM_RES_CTLR_SWAP
 -      bool "Memory Resource Controller Swap Extension(EXPERIMENTAL)"
 -      depends on CGROUP_MEM_RES_CTLR && SWAP && EXPERIMENTAL
 +      bool "Memory Resource Controller Swap Extension"
 +      depends on CGROUP_MEM_RES_CTLR && SWAP
        help
          Add swap management feature to memory resource controller. When you
          enable this, you can limit mem+swap usage per cgroup. In other words,
@@@ -661,14 -634,11 +661,14 @@@ config BLK_CGROU
  
        Currently, CFQ IO scheduler uses it to recognize task groups and
        control disk bandwidth allocation (proportional time slice allocation)
 -      to such task groups.
 +      to such task groups. It is also used by bio throttling logic in
 +      block layer to implement upper limit in IO rates on a device.
  
        This option only enables generic Block IO controller infrastructure.
 -      One needs to also enable actual IO controlling logic in CFQ for it
 -      to take effect. (CONFIG_CFQ_GROUP_IOSCHED=y).
 +      One needs to also enable actual IO controlling logic/policy. For
 +      enabling proportional weight division of disk bandwidth in CFQ seti
 +      CONFIG_CFQ_GROUP_IOSCHED=y and for enabling throttling policy set
 +      CONFIG_BLK_THROTTLE=y.
  
        See Documentation/cgroups/blkio-controller.txt for more information.
  
@@@ -686,42 -656,40 +686,42 @@@ config MM_OWNE
        bool
  
  config SYSFS_DEPRECATED
 -      bool
 -
 -config SYSFS_DEPRECATED_V2
        bool "enable deprecated sysfs features to support old userspace tools"
        depends on SYSFS
        default n
 -      select SYSFS_DEPRECATED
 -      help
 -        This option switches the layout of sysfs to the deprecated
 -        version. Do not use it on recent distributions.
 -
 -        The current sysfs layout features a unified device tree at
 -        /sys/devices/, which is able to express a hierarchy between
 -        class devices. If the deprecated option is set to Y, the
 -        unified device tree is split into a bus device tree at
 -        /sys/devices/ and several individual class device trees at
 -        /sys/class/. The class and bus devices will be connected by
 -        "<subsystem>:<name>" and the "device" links. The "block"
 -        class devices, will not show up in /sys/class/block/. Some
 -        subsystems will suppress the creation of some devices which
 -        depend on the unified device tree.
 -
 -        This option is not a pure compatibility option that can
 -        be safely enabled on newer distributions. It will change the
 -        layout of sysfs to the non-extensible deprecated version,
 -        and disable some features, which can not be exported without
 -        confusing older userspace tools. Since 2007/2008 all major
 -        distributions do not enable this option, and ship no tools which
 -        depend on the deprecated layout or this option.
 -
 -        If you are using a new kernel on an older distribution, or use
 -        older userspace tools, you might need to say Y here. Do not say Y,
 -        if the original kernel, that came with your distribution, has
 -        this option set to N.
 +      help
 +        This option adds code that switches the layout of the "block" class
 +        devices, to not show up in /sys/class/block/, but only in
 +        /sys/block/.
 +
 +        This switch is only active when the sysfs.deprecated=1 boot option is
 +        passed or the SYSFS_DEPRECATED_V2 option is set.
 +
 +        This option allows new kernels to run on old distributions and tools,
 +        which might get confused by /sys/class/block/. Since 2007/2008 all
 +        major distributions and tools handle this just fine.
 +
 +        Recent distributions and userspace tools after 2009/2010 depend on
 +        the existence of /sys/class/block/, and will not work with this
 +        option enabled.
 +
 +        Only if you are using a new kernel on an old distribution, you might
 +        need to say Y here.
 +
 +config SYSFS_DEPRECATED_V2
 +      bool "enabled deprecated sysfs features by default"
 +      default n
 +      depends on SYSFS
 +      depends on SYSFS_DEPRECATED
 +      help
 +        Enable deprecated sysfs by default.
 +
 +        See the CONFIG_SYSFS_DEPRECATED option for more details about this
 +        option.
 +
 +        Only if you are using a new kernel on an old distribution, you might
 +        need to say Y here. Even then, odds are you would not need it
 +        enabled, you can always pass the boot option if absolutely necessary.
  
  config RELAY
        bool "Kernel->user space relay support (formerly relayfs)"
@@@ -1019,7 -987,6 +1019,7 @@@ config PERF_EVENT
        default y if (PROFILING || PERF_COUNTERS)
        depends on HAVE_PERF_EVENTS
        select ANON_INODES
 +      select IRQ_WORK
        help
          Enable kernel support for various performance events provided
          by software and hardware.
diff --combined kernel/pm_qos_params.c
index a96b850ba08a6a47dc9c9bd624849c4fbfe99349,49829c5b4b478671368ec5f814970deda4eb1fc0..c7a8f453919e65a42e0251b968a2d3652e0a4c3a
@@@ -110,7 -110,6 +110,7 @@@ static const struct file_operations pm_
        .write = pm_qos_power_write,
        .open = pm_qos_power_open,
        .release = pm_qos_power_release,
 +      .llseek = noop_llseek,
  };
  
  /* unlocked internal variant */
@@@ -213,17 -212,15 +213,17 @@@ EXPORT_SYMBOL_GPL(pm_qos_request_active
  
  /**
   * pm_qos_add_request - inserts new qos request into the list
 - * @pm_qos_class: identifies which list of qos request to us
 + * @dep: pointer to a preallocated handle
 + * @pm_qos_class: identifies which list of qos request to use
   * @value: defines the qos request
   *
   * This function inserts a new entry in the pm_qos_class list of requested qos
   * performance characteristics.  It recomputes the aggregate QoS expectations
 - * for the pm_qos_class of parameters, and returns the pm_qos_request list
 - * element as a handle for use in updating and removal.  Call needs to save
 - * this handle for later use.
 + * for the pm_qos_class of parameters and initializes the pm_qos_request_list
 + * handle.  Caller needs to save this handle for later use in updates and
 + * removal.
   */
 +
  void pm_qos_add_request(struct pm_qos_request_list *dep,
                        int pm_qos_class, s32 value)
  {
@@@ -351,7 -348,7 +351,7 @@@ static int pm_qos_power_open(struct ino
  
        pm_qos_class = find_pm_qos_object_by_minor(iminor(inode));
        if (pm_qos_class >= 0) {
 -              struct pm_qos_request_list *req = kzalloc(GFP_KERNEL, sizeof(*req));
 +               struct pm_qos_request_list *req = kzalloc(sizeof(*req), GFP_KERNEL);
                if (!req)
                        return -ENOMEM;
  
@@@ -390,16 -387,14 +390,16 @@@ static ssize_t pm_qos_power_write(struc
        } else if (count == 11) { /* len('0x12345678/0') */
                if (copy_from_user(ascii_value, buf, 11))
                        return -EFAULT;
 +              if (strlen(ascii_value) != 10)
 +                      return -EINVAL;
                x = sscanf(ascii_value, "%x", &value);
                if (x != 1)
                        return -EINVAL;
 -              pr_debug(KERN_ERR "%s, %d, 0x%x\n", ascii_value, x, value);
 +              pr_debug("%s, %d, 0x%x\n", ascii_value, x, value);
        } else
                return -EINVAL;
  
-       pm_qos_req = (struct pm_qos_request_list *)filp->private_data;
+       pm_qos_req = filp->private_data;
        pm_qos_update_request(pm_qos_req, value);
  
        return count;
index 544301d29dee45b0dc089db788bcfe89687bfa45,52f032306c7cdf5278097277b9b53764443a6185..b8d2852baa4abe7368e0aa50c294cc6a6137855a
@@@ -514,8 -514,8 +514,8 @@@ static int kprobe_dispatcher(struct kpr
  static int kretprobe_dispatcher(struct kretprobe_instance *ri,
                                struct pt_regs *regs);
  
 -/* Check the name is good for event/group */
 -static int check_event_name(const char *name)
 +/* Check the name is good for event/group/fields */
 +static int is_good_name(const char *name)
  {
        if (!isalpha(*name) && *name != '_')
                return 0;
@@@ -557,7 -557,7 +557,7 @@@ static struct trace_probe *alloc_trace_
        else
                tp->rp.kp.pre_handler = kprobe_dispatcher;
  
 -      if (!event || !check_event_name(event)) {
 +      if (!event || !is_good_name(event)) {
                ret = -EINVAL;
                goto error;
        }
        if (!tp->call.name)
                goto error;
  
 -      if (!group || !check_event_name(group)) {
 +      if (!group || !is_good_name(group)) {
                ret = -EINVAL;
                goto error;
        }
@@@ -648,7 -648,7 +648,7 @@@ static int register_trace_probe(struct 
        }
        ret = register_probe_event(tp);
        if (ret) {
-               pr_warning("Faild to register probe event(%d)\n", ret);
+               pr_warning("Failed to register probe event(%d)\n", ret);
                goto end;
        }
  
@@@ -883,7 -883,7 +883,7 @@@ static int create_trace_probe(int argc
        int i, ret = 0;
        int is_return = 0, is_delete = 0;
        char *symbol = NULL, *event = NULL, *group = NULL;
 -      char *arg, *tmp;
 +      char *arg;
        unsigned long offset = 0;
        void *addr = NULL;
        char buf[MAX_EVENT_NAME_LEN];
        /* parse arguments */
        ret = 0;
        for (i = 0; i < argc && i < MAX_TRACE_ARGS; i++) {
 +              /* Increment count for freeing args in error case */
 +              tp->nr_args++;
 +
                /* Parse argument name */
                arg = strchr(argv[i], '=');
 -              if (arg)
 +              if (arg) {
                        *arg++ = '\0';
 -              else
 +                      tp->args[i].name = kstrdup(argv[i], GFP_KERNEL);
 +              } else {
                        arg = argv[i];
 +                      /* If argument name is omitted, set "argN" */
 +                      snprintf(buf, MAX_EVENT_NAME_LEN, "arg%d", i + 1);
 +                      tp->args[i].name = kstrdup(buf, GFP_KERNEL);
 +              }
  
 -              tp->args[i].name = kstrdup(argv[i], GFP_KERNEL);
                if (!tp->args[i].name) {
 -                      pr_info("Failed to allocate argument%d name '%s'.\n",
 -                              i, argv[i]);
 +                      pr_info("Failed to allocate argument[%d] name.\n", i);
                        ret = -ENOMEM;
                        goto error;
                }
 -              tmp = strchr(tp->args[i].name, ':');
 -              if (tmp)
 -                      *tmp = '_';     /* convert : to _ */
 +
 +              if (!is_good_name(tp->args[i].name)) {
 +                      pr_info("Invalid argument[%d] name: %s\n",
 +                              i, tp->args[i].name);
 +                      ret = -EINVAL;
 +                      goto error;
 +              }
  
                if (conflict_field_name(tp->args[i].name, tp->args, i)) {
 -                      pr_info("Argument%d name '%s' conflicts with "
 +                      pr_info("Argument[%d] name '%s' conflicts with "
                                "another field.\n", i, argv[i]);
                        ret = -EINVAL;
                        goto error;
                /* Parse fetch argument */
                ret = parse_probe_arg(arg, tp, &tp->args[i], is_return);
                if (ret) {
 -                      pr_info("Parse error at argument%d. (%d)\n", i, ret);
 -                      kfree(tp->args[i].name);
 +                      pr_info("Parse error at argument[%d]. (%d)\n", i, ret);
                        goto error;
                }
 -
 -              tp->nr_args++;
        }
  
        ret = register_trace_probe(tp);
diff --combined mm/percpu.c
index 6fc9015534f85520458adeba616a5c71e113dd17,039f51a0dc3f4ec0a655ab472c0dbdd61ff61c30..efe816856a9d777b284f8bf25cc7548154f374d6
@@@ -31,7 -31,7 +31,7 @@@
   * as small as 4 bytes.  The allocator organizes chunks into lists
   * according to free size and tries to allocate from the fullest one.
   * Each chunk keeps the maximum contiguous area size hint which is
-  * guaranteed to be eqaul to or larger than the maximum contiguous
+  * guaranteed to be equal to or larger than the maximum contiguous
   * area in the chunk.  This helps the allocator not to iterate the
   * chunk maps unnecessarily.
   *
@@@ -76,7 -76,6 +76,7 @@@
  #define PCPU_SLOT_BASE_SHIFT          5       /* 1-31 shares the same slot */
  #define PCPU_DFL_MAP_ALLOC            16      /* start a map with 16 ents */
  
 +#ifdef CONFIG_SMP
  /* default addr <-> pcpu_ptr mapping, override in asm/percpu.h if necessary */
  #ifndef __addr_to_pcpu_ptr
  #define __addr_to_pcpu_ptr(addr)                                      \
                         (unsigned long)pcpu_base_addr -                \
                         (unsigned long)__per_cpu_start)
  #endif
 +#else /* CONFIG_SMP */
 +/* on UP, it's always identity mapped */
 +#define __addr_to_pcpu_ptr(addr)      (void __percpu *)(addr)
 +#define __pcpu_ptr_to_addr(ptr)               (void __force *)(ptr)
 +#endif        /* CONFIG_SMP */
  
  struct pcpu_chunk {
        struct list_head        list;           /* linked to pcpu_slot lists */
@@@ -399,9 -393,7 +399,9 @@@ static int pcpu_extend_area_map(struct 
                goto out_unlock;
  
        old_size = chunk->map_alloc * sizeof(chunk->map[0]);
 -      memcpy(new, chunk->map, old_size);
 +      old = chunk->map;
 +
 +      memcpy(new, old, old_size);
  
        chunk->map_alloc = new_alloc;
        chunk->map = new;
@@@ -826,8 -818,8 +826,8 @@@ fail_unlock_mutex
   * @size: size of area to allocate in bytes
   * @align: alignment of area (max PAGE_SIZE)
   *
 - * Allocate percpu area of @size bytes aligned at @align.  Might
 - * sleep.  Might trigger writeouts.
 + * Allocate zero-filled percpu area of @size bytes aligned at @align.
 + * Might sleep.  Might trigger writeouts.
   *
   * CONTEXT:
   * Does GFP_KERNEL allocation.
@@@ -846,10 -838,9 +846,10 @@@ EXPORT_SYMBOL_GPL(__alloc_percpu)
   * @size: size of area to allocate in bytes
   * @align: alignment of area (max PAGE_SIZE)
   *
 - * Allocate percpu area of @size bytes aligned at @align from reserved
 - * percpu area if arch has set it up; otherwise, allocation is served
 - * from the same dynamic area.  Might sleep.  Might trigger writeouts.
 + * Allocate zero-filled percpu area of @size bytes aligned at @align
 + * from reserved percpu area if arch has set it up; otherwise,
 + * allocation is served from the same dynamic area.  Might sleep.
 + * Might trigger writeouts.
   *
   * CONTEXT:
   * Does GFP_KERNEL allocation.
@@@ -956,7 -947,6 +956,7 @@@ EXPORT_SYMBOL_GPL(free_percpu)
   */
  bool is_kernel_percpu_address(unsigned long addr)
  {
 +#ifdef CONFIG_SMP
        const size_t static_size = __per_cpu_end - __per_cpu_start;
        void __percpu *base = __addr_to_pcpu_ptr(pcpu_base_addr);
        unsigned int cpu;
                if ((void *)addr >= start && (void *)addr < start + static_size)
                        return true;
          }
 +#endif
 +      /* on UP, can't distinguish from other static vars, always false */
        return false;
  }
  
@@@ -1076,6 -1064,161 +1076,6 @@@ void __init pcpu_free_alloc_info(struc
        free_bootmem(__pa(ai), ai->__ai_size);
  }
  
 -/**
 - * pcpu_build_alloc_info - build alloc_info considering distances between CPUs
 - * @reserved_size: the size of reserved percpu area in bytes
 - * @dyn_size: minimum free size for dynamic allocation in bytes
 - * @atom_size: allocation atom size
 - * @cpu_distance_fn: callback to determine distance between cpus, optional
 - *
 - * This function determines grouping of units, their mappings to cpus
 - * and other parameters considering needed percpu size, allocation
 - * atom size and distances between CPUs.
 - *
 - * Groups are always mutliples of atom size and CPUs which are of
 - * LOCAL_DISTANCE both ways are grouped together and share space for
 - * units in the same group.  The returned configuration is guaranteed
 - * to have CPUs on different nodes on different groups and >=75% usage
 - * of allocated virtual address space.
 - *
 - * RETURNS:
 - * On success, pointer to the new allocation_info is returned.  On
 - * failure, ERR_PTR value is returned.
 - */
 -static struct pcpu_alloc_info * __init pcpu_build_alloc_info(
 -                              size_t reserved_size, size_t dyn_size,
 -                              size_t atom_size,
 -                              pcpu_fc_cpu_distance_fn_t cpu_distance_fn)
 -{
 -      static int group_map[NR_CPUS] __initdata;
 -      static int group_cnt[NR_CPUS] __initdata;
 -      const size_t static_size = __per_cpu_end - __per_cpu_start;
 -      int nr_groups = 1, nr_units = 0;
 -      size_t size_sum, min_unit_size, alloc_size;
 -      int upa, max_upa, uninitialized_var(best_upa);  /* units_per_alloc */
 -      int last_allocs, group, unit;
 -      unsigned int cpu, tcpu;
 -      struct pcpu_alloc_info *ai;
 -      unsigned int *cpu_map;
 -
 -      /* this function may be called multiple times */
 -      memset(group_map, 0, sizeof(group_map));
 -      memset(group_cnt, 0, sizeof(group_cnt));
 -
 -      /* calculate size_sum and ensure dyn_size is enough for early alloc */
 -      size_sum = PFN_ALIGN(static_size + reserved_size +
 -                          max_t(size_t, dyn_size, PERCPU_DYNAMIC_EARLY_SIZE));
 -      dyn_size = size_sum - static_size - reserved_size;
 -
 -      /*
 -       * Determine min_unit_size, alloc_size and max_upa such that
 -       * alloc_size is multiple of atom_size and is the smallest
 -       * which can accomodate 4k aligned segments which are equal to
 -       * or larger than min_unit_size.
 -       */
 -      min_unit_size = max_t(size_t, size_sum, PCPU_MIN_UNIT_SIZE);
 -
 -      alloc_size = roundup(min_unit_size, atom_size);
 -      upa = alloc_size / min_unit_size;
 -      while (alloc_size % upa || ((alloc_size / upa) & ~PAGE_MASK))
 -              upa--;
 -      max_upa = upa;
 -
 -      /* group cpus according to their proximity */
 -      for_each_possible_cpu(cpu) {
 -              group = 0;
 -      next_group:
 -              for_each_possible_cpu(tcpu) {
 -                      if (cpu == tcpu)
 -                              break;
 -                      if (group_map[tcpu] == group && cpu_distance_fn &&
 -                          (cpu_distance_fn(cpu, tcpu) > LOCAL_DISTANCE ||
 -                           cpu_distance_fn(tcpu, cpu) > LOCAL_DISTANCE)) {
 -                              group++;
 -                              nr_groups = max(nr_groups, group + 1);
 -                              goto next_group;
 -                      }
 -              }
 -              group_map[cpu] = group;
 -              group_cnt[group]++;
 -      }
 -
 -      /*
 -       * Expand unit size until address space usage goes over 75%
 -       * and then as much as possible without using more address
 -       * space.
 -       */
 -      last_allocs = INT_MAX;
 -      for (upa = max_upa; upa; upa--) {
 -              int allocs = 0, wasted = 0;
 -
 -              if (alloc_size % upa || ((alloc_size / upa) & ~PAGE_MASK))
 -                      continue;
 -
 -              for (group = 0; group < nr_groups; group++) {
 -                      int this_allocs = DIV_ROUND_UP(group_cnt[group], upa);
 -                      allocs += this_allocs;
 -                      wasted += this_allocs * upa - group_cnt[group];
 -              }
 -
 -              /*
 -               * Don't accept if wastage is over 25%.  The
 -               * greater-than comparison ensures upa==1 always
 -               * passes the following check.
 -               */
 -              if (wasted > num_possible_cpus() / 3)
 -                      continue;
 -
 -              /* and then don't consume more memory */
 -              if (allocs > last_allocs)
 -                      break;
 -              last_allocs = allocs;
 -              best_upa = upa;
 -      }
 -      upa = best_upa;
 -
 -      /* allocate and fill alloc_info */
 -      for (group = 0; group < nr_groups; group++)
 -              nr_units += roundup(group_cnt[group], upa);
 -
 -      ai = pcpu_alloc_alloc_info(nr_groups, nr_units);
 -      if (!ai)
 -              return ERR_PTR(-ENOMEM);
 -      cpu_map = ai->groups[0].cpu_map;
 -
 -      for (group = 0; group < nr_groups; group++) {
 -              ai->groups[group].cpu_map = cpu_map;
 -              cpu_map += roundup(group_cnt[group], upa);
 -      }
 -
 -      ai->static_size = static_size;
 -      ai->reserved_size = reserved_size;
 -      ai->dyn_size = dyn_size;
 -      ai->unit_size = alloc_size / upa;
 -      ai->atom_size = atom_size;
 -      ai->alloc_size = alloc_size;
 -
 -      for (group = 0, unit = 0; group_cnt[group]; group++) {
 -              struct pcpu_group_info *gi = &ai->groups[group];
 -
 -              /*
 -               * Initialize base_offset as if all groups are located
 -               * back-to-back.  The caller should update this to
 -               * reflect actual allocation.
 -               */
 -              gi->base_offset = unit * ai->unit_size;
 -
 -              for_each_possible_cpu(cpu)
 -                      if (group_map[cpu] == group)
 -                              gi->cpu_map[gi->nr_units++] = cpu;
 -              gi->nr_units = roundup(gi->nr_units, upa);
 -              unit += gi->nr_units;
 -      }
 -      BUG_ON(unit != nr_units);
 -
 -      return ai;
 -}
 -
  /**
   * pcpu_dump_alloc_info - print out information about pcpu_alloc_info
   * @lvl: loglevel
@@@ -1218,9 -1361,7 +1218,9 @@@ int __init pcpu_setup_first_chunk(cons
  
        /* sanity checks */
        PCPU_SETUP_BUG_ON(ai->nr_groups <= 0);
 +#ifdef CONFIG_SMP
        PCPU_SETUP_BUG_ON(!ai->static_size);
 +#endif
        PCPU_SETUP_BUG_ON(!base_addr);
        PCPU_SETUP_BUG_ON(ai->unit_size < size_sum);
        PCPU_SETUP_BUG_ON(ai->unit_size & ~PAGE_MASK);
  
                        if (pcpu_first_unit_cpu == NR_CPUS)
                                pcpu_first_unit_cpu = cpu;
 +                      pcpu_last_unit_cpu = cpu;
                }
        }
 -      pcpu_last_unit_cpu = cpu;
        pcpu_nr_units = unit;
  
        for_each_possible_cpu(cpu)
        return 0;
  }
  
 +#ifdef CONFIG_SMP
 +
  const char *pcpu_fc_names[PCPU_FC_NR] __initdata = {
        [PCPU_FC_AUTO]  = "auto",
        [PCPU_FC_EMBED] = "embed",
@@@ -1374,180 -1513,8 +1374,180 @@@ static int __init percpu_alloc_setup(ch
  }
  early_param("percpu_alloc", percpu_alloc_setup);
  
 +/*
 + * pcpu_embed_first_chunk() is used by the generic percpu setup.
 + * Build it if needed by the arch config or the generic setup is going
 + * to be used.
 + */
  #if defined(CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK) || \
        !defined(CONFIG_HAVE_SETUP_PER_CPU_AREA)
 +#define BUILD_EMBED_FIRST_CHUNK
 +#endif
 +
 +/* build pcpu_page_first_chunk() iff needed by the arch config */
 +#if defined(CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK)
 +#define BUILD_PAGE_FIRST_CHUNK
 +#endif
 +
 +/* pcpu_build_alloc_info() is used by both embed and page first chunk */
 +#if defined(BUILD_EMBED_FIRST_CHUNK) || defined(BUILD_PAGE_FIRST_CHUNK)
 +/**
 + * pcpu_build_alloc_info - build alloc_info considering distances between CPUs
 + * @reserved_size: the size of reserved percpu area in bytes
 + * @dyn_size: minimum free size for dynamic allocation in bytes
 + * @atom_size: allocation atom size
 + * @cpu_distance_fn: callback to determine distance between cpus, optional
 + *
 + * This function determines grouping of units, their mappings to cpus
 + * and other parameters considering needed percpu size, allocation
 + * atom size and distances between CPUs.
 + *
 + * Groups are always mutliples of atom size and CPUs which are of
 + * LOCAL_DISTANCE both ways are grouped together and share space for
 + * units in the same group.  The returned configuration is guaranteed
 + * to have CPUs on different nodes on different groups and >=75% usage
 + * of allocated virtual address space.
 + *
 + * RETURNS:
 + * On success, pointer to the new allocation_info is returned.  On
 + * failure, ERR_PTR value is returned.
 + */
 +static struct pcpu_alloc_info * __init pcpu_build_alloc_info(
 +                              size_t reserved_size, size_t dyn_size,
 +                              size_t atom_size,
 +                              pcpu_fc_cpu_distance_fn_t cpu_distance_fn)
 +{
 +      static int group_map[NR_CPUS] __initdata;
 +      static int group_cnt[NR_CPUS] __initdata;
 +      const size_t static_size = __per_cpu_end - __per_cpu_start;
 +      int nr_groups = 1, nr_units = 0;
 +      size_t size_sum, min_unit_size, alloc_size;
 +      int upa, max_upa, uninitialized_var(best_upa);  /* units_per_alloc */
 +      int last_allocs, group, unit;
 +      unsigned int cpu, tcpu;
 +      struct pcpu_alloc_info *ai;
 +      unsigned int *cpu_map;
 +
 +      /* this function may be called multiple times */
 +      memset(group_map, 0, sizeof(group_map));
 +      memset(group_cnt, 0, sizeof(group_cnt));
 +
 +      /* calculate size_sum and ensure dyn_size is enough for early alloc */
 +      size_sum = PFN_ALIGN(static_size + reserved_size +
 +                          max_t(size_t, dyn_size, PERCPU_DYNAMIC_EARLY_SIZE));
 +      dyn_size = size_sum - static_size - reserved_size;
 +
 +      /*
 +       * Determine min_unit_size, alloc_size and max_upa such that
 +       * alloc_size is multiple of atom_size and is the smallest
 +       * which can accomodate 4k aligned segments which are equal to
 +       * or larger than min_unit_size.
 +       */
 +      min_unit_size = max_t(size_t, size_sum, PCPU_MIN_UNIT_SIZE);
 +
 +      alloc_size = roundup(min_unit_size, atom_size);
 +      upa = alloc_size / min_unit_size;
 +      while (alloc_size % upa || ((alloc_size / upa) & ~PAGE_MASK))
 +              upa--;
 +      max_upa = upa;
 +
 +      /* group cpus according to their proximity */
 +      for_each_possible_cpu(cpu) {
 +              group = 0;
 +      next_group:
 +              for_each_possible_cpu(tcpu) {
 +                      if (cpu == tcpu)
 +                              break;
 +                      if (group_map[tcpu] == group && cpu_distance_fn &&
 +                          (cpu_distance_fn(cpu, tcpu) > LOCAL_DISTANCE ||
 +                           cpu_distance_fn(tcpu, cpu) > LOCAL_DISTANCE)) {
 +                              group++;
 +                              nr_groups = max(nr_groups, group + 1);
 +                              goto next_group;
 +                      }
 +              }
 +              group_map[cpu] = group;
 +              group_cnt[group]++;
 +      }
 +
 +      /*
 +       * Expand unit size until address space usage goes over 75%
 +       * and then as much as possible without using more address
 +       * space.
 +       */
 +      last_allocs = INT_MAX;
 +      for (upa = max_upa; upa; upa--) {
 +              int allocs = 0, wasted = 0;
 +
 +              if (alloc_size % upa || ((alloc_size / upa) & ~PAGE_MASK))
 +                      continue;
 +
 +              for (group = 0; group < nr_groups; group++) {
 +                      int this_allocs = DIV_ROUND_UP(group_cnt[group], upa);
 +                      allocs += this_allocs;
 +                      wasted += this_allocs * upa - group_cnt[group];
 +              }
 +
 +              /*
 +               * Don't accept if wastage is over 1/3.  The
 +               * greater-than comparison ensures upa==1 always
 +               * passes the following check.
 +               */
 +              if (wasted > num_possible_cpus() / 3)
 +                      continue;
 +
 +              /* and then don't consume more memory */
 +              if (allocs > last_allocs)
 +                      break;
 +              last_allocs = allocs;
 +              best_upa = upa;
 +      }
 +      upa = best_upa;
 +
 +      /* allocate and fill alloc_info */
 +      for (group = 0; group < nr_groups; group++)
 +              nr_units += roundup(group_cnt[group], upa);
 +
 +      ai = pcpu_alloc_alloc_info(nr_groups, nr_units);
 +      if (!ai)
 +              return ERR_PTR(-ENOMEM);
 +      cpu_map = ai->groups[0].cpu_map;
 +
 +      for (group = 0; group < nr_groups; group++) {
 +              ai->groups[group].cpu_map = cpu_map;
 +              cpu_map += roundup(group_cnt[group], upa);
 +      }
 +
 +      ai->static_size = static_size;
 +      ai->reserved_size = reserved_size;
 +      ai->dyn_size = dyn_size;
 +      ai->unit_size = alloc_size / upa;
 +      ai->atom_size = atom_size;
 +      ai->alloc_size = alloc_size;
 +
 +      for (group = 0, unit = 0; group_cnt[group]; group++) {
 +              struct pcpu_group_info *gi = &ai->groups[group];
 +
 +              /*
 +               * Initialize base_offset as if all groups are located
 +               * back-to-back.  The caller should update this to
 +               * reflect actual allocation.
 +               */
 +              gi->base_offset = unit * ai->unit_size;
 +
 +              for_each_possible_cpu(cpu)
 +                      if (group_map[cpu] == group)
 +                              gi->cpu_map[gi->nr_units++] = cpu;
 +              gi->nr_units = roundup(gi->nr_units, upa);
 +              unit += gi->nr_units;
 +      }
 +      BUG_ON(unit != nr_units);
 +
 +      return ai;
 +}
 +#endif /* BUILD_EMBED_FIRST_CHUNK || BUILD_PAGE_FIRST_CHUNK */
 +
 +#if defined(BUILD_EMBED_FIRST_CHUNK)
  /**
   * pcpu_embed_first_chunk - embed the first percpu chunk into bootmem
   * @reserved_size: the size of reserved percpu area in bytes
@@@ -1676,9 -1643,10 +1676,9 @@@ out_free
                free_bootmem(__pa(areas), areas_size);
        return rc;
  }
 -#endif /* CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK ||
 -        !CONFIG_HAVE_SETUP_PER_CPU_AREA */
 +#endif /* BUILD_EMBED_FIRST_CHUNK */
  
 -#ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK
 +#ifdef BUILD_PAGE_FIRST_CHUNK
  /**
   * pcpu_page_first_chunk - map the first chunk using PAGE_SIZE pages
   * @reserved_size: the size of reserved percpu area in bytes
@@@ -1786,11 -1754,10 +1786,11 @@@ out_free_ar
        pcpu_free_alloc_info(ai);
        return rc;
  }
 -#endif /* CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK */
 +#endif /* BUILD_PAGE_FIRST_CHUNK */
  
 +#ifndef       CONFIG_HAVE_SETUP_PER_CPU_AREA
  /*
 - * Generic percpu area setup.
 + * Generic SMP percpu area setup.
   *
   * The embedding helper is used because its behavior closely resembles
   * the original non-dynamic generic percpu area setup.  This is
   * on the physical linear memory mapping which uses large page
   * mappings on applicable archs.
   */
 -#ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA
  unsigned long __per_cpu_offset[NR_CPUS] __read_mostly;
  EXPORT_SYMBOL(__per_cpu_offset);
  
@@@ -1829,48 -1797,13 +1829,48 @@@ void __init setup_per_cpu_areas(void
                                    PERCPU_DYNAMIC_RESERVE, PAGE_SIZE, NULL,
                                    pcpu_dfl_fc_alloc, pcpu_dfl_fc_free);
        if (rc < 0)
 -              panic("Failed to initialized percpu areas.");
 +              panic("Failed to initialize percpu areas.");
  
        delta = (unsigned long)pcpu_base_addr - (unsigned long)__per_cpu_start;
        for_each_possible_cpu(cpu)
                __per_cpu_offset[cpu] = delta + pcpu_unit_offsets[cpu];
  }
 -#endif /* CONFIG_HAVE_SETUP_PER_CPU_AREA */
 +#endif        /* CONFIG_HAVE_SETUP_PER_CPU_AREA */
 +
 +#else /* CONFIG_SMP */
 +
 +/*
 + * UP percpu area setup.
 + *
 + * UP always uses km-based percpu allocator with identity mapping.
 + * Static percpu variables are indistinguishable from the usual static
 + * variables and don't require any special preparation.
 + */
 +void __init setup_per_cpu_areas(void)
 +{
 +      const size_t unit_size =
 +              roundup_pow_of_two(max_t(size_t, PCPU_MIN_UNIT_SIZE,
 +                                       PERCPU_DYNAMIC_RESERVE));
 +      struct pcpu_alloc_info *ai;
 +      void *fc;
 +
 +      ai = pcpu_alloc_alloc_info(1, 1);
 +      fc = __alloc_bootmem(unit_size, PAGE_SIZE, __pa(MAX_DMA_ADDRESS));
 +      if (!ai || !fc)
 +              panic("Failed to allocate memory for percpu areas.");
 +
 +      ai->dyn_size = unit_size;
 +      ai->unit_size = unit_size;
 +      ai->atom_size = unit_size;
 +      ai->alloc_size = unit_size;
 +      ai->groups[0].nr_units = 1;
 +      ai->groups[0].cpu_map[0] = 0;
 +
 +      if (pcpu_setup_first_chunk(ai, fc) < 0)
 +              panic("Failed to initialize percpu areas.");
 +}
 +
 +#endif        /* CONFIG_SMP */
  
  /*
   * First and reserved chunks are initialized with temporary allocation
diff --combined mm/vmscan.c
index c5dfabf25f115a34df8f9111843af28a8d58d906,18fa3d76b3e06579daf8e07e6ed14d33c3780782..b94c9464f2620b4e06e4219899114c2274749735
@@@ -79,8 -79,8 +79,8 @@@ struct scan_control 
        int order;
  
        /*
-        * Intend to reclaim enough contenious memory rather than to reclaim
-        * enough amount memory. I.e, it's the mode for high order allocation.
+        * Intend to reclaim enough continuous memory rather than reclaim
+        * enough amount of memory. i.e, mode for high order allocation.
         */
        bool lumpy_reclaim_mode;
  
@@@ -1804,11 -1804,12 +1804,11 @@@ static void shrink_zone(int priority, s
   * If a zone is deemed to be full of pinned pages then just give it a light
   * scan then give up on it.
   */
 -static bool shrink_zones(int priority, struct zonelist *zonelist,
 +static void shrink_zones(int priority, struct zonelist *zonelist,
                                        struct scan_control *sc)
  {
        struct zoneref *z;
        struct zone *zone;
 -      bool all_unreclaimable = true;
  
        for_each_zone_zonelist_nodemask(zone, z, zonelist,
                                        gfp_zone(sc->gfp_mask), sc->nodemask) {
                }
  
                shrink_zone(priority, zone, sc);
 -              all_unreclaimable = false;
        }
 +}
 +
 +static bool zone_reclaimable(struct zone *zone)
 +{
 +      return zone->pages_scanned < zone_reclaimable_pages(zone) * 6;
 +}
 +
 +/*
 + * As hibernation is going on, kswapd is freezed so that it can't mark
 + * the zone into all_unreclaimable. It can't handle OOM during hibernation.
 + * So let's check zone's unreclaimable in direct reclaim as well as kswapd.
 + */
 +static bool all_unreclaimable(struct zonelist *zonelist,
 +              struct scan_control *sc)
 +{
 +      struct zoneref *z;
 +      struct zone *zone;
 +      bool all_unreclaimable = true;
 +
 +      for_each_zone_zonelist_nodemask(zone, z, zonelist,
 +                      gfp_zone(sc->gfp_mask), sc->nodemask) {
 +              if (!populated_zone(zone))
 +                      continue;
 +              if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL))
 +                      continue;
 +              if (zone_reclaimable(zone)) {
 +                      all_unreclaimable = false;
 +                      break;
 +              }
 +      }
 +
        return all_unreclaimable;
  }
  
@@@ -1881,6 -1852,7 +1881,6 @@@ static unsigned long do_try_to_free_pag
                                        struct scan_control *sc)
  {
        int priority;
 -      bool all_unreclaimable;
        unsigned long total_scanned = 0;
        struct reclaim_state *reclaim_state = current->reclaim_state;
        struct zoneref *z;
                sc->nr_scanned = 0;
                if (!priority)
                        disable_swap_token();
 -              all_unreclaimable = shrink_zones(priority, zonelist, sc);
 +              shrink_zones(priority, zonelist, sc);
                /*
                 * Don't shrink slabs when reclaiming memory from
                 * over limit cgroups
@@@ -1959,7 -1931,7 +1959,7 @@@ out
                return sc->nr_reclaimed;
  
        /* top priority shrink_zones still had more to do? don't OOM, then */
 -      if (scanning_global_lru(sc) && !all_unreclaimable)
 +      if (scanning_global_lru(sc) && !all_unreclaimable(zonelist, sc))
                return 1;
  
        return 0;
@@@ -1997,10 -1969,9 +1997,10 @@@ unsigned long try_to_free_pages(struct 
  unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem,
                                                gfp_t gfp_mask, bool noswap,
                                                unsigned int swappiness,
 -                                              struct zone *zone, int nid)
 +                                              struct zone *zone)
  {
        struct scan_control sc = {
 +              .nr_to_reclaim = SWAP_CLUSTER_MAX,
                .may_writepage = !laptop_mode,
                .may_unmap = 1,
                .may_swap = !noswap,
                .order = 0,
                .mem_cgroup = mem,
        };
 -      nodemask_t nm  = nodemask_of_node(nid);
 -
        sc.gfp_mask = (gfp_mask & GFP_RECLAIM_MASK) |
                        (GFP_HIGHUSER_MOVABLE & ~GFP_RECLAIM_MASK);
 -      sc.nodemask = &nm;
 -      sc.nr_reclaimed = 0;
 -      sc.nr_scanned = 0;
  
        trace_mm_vmscan_memcg_softlimit_reclaim_begin(0,
                                                      sc.may_writepage,
@@@ -2196,6 -2172,7 +2196,6 @@@ loop_again
                for (i = 0; i <= end_zone; i++) {
                        struct zone *zone = pgdat->node_zones + i;
                        int nr_slab;
 -                      int nid, zid;
  
                        if (!populated_zone(zone))
                                continue;
  
                        sc.nr_scanned = 0;
  
 -                      nid = pgdat->node_id;
 -                      zid = zone_idx(zone);
                        /*
                         * Call soft limit reclaim before calling shrink_zone.
                         * For now we ignore the return value
                         */
 -                      mem_cgroup_soft_limit_reclaim(zone, order, sc.gfp_mask,
 -                                                      nid, zid);
 +                      mem_cgroup_soft_limit_reclaim(zone, order, sc.gfp_mask);
 +
                        /*
                         * We put equal pressure on every zone, unless one
                         * zone has way too many pages free already.
                        total_scanned += sc.nr_scanned;
                        if (zone->all_unreclaimable)
                                continue;
 -                      if (nr_slab == 0 &&
 -                          zone->pages_scanned >= (zone_reclaimable_pages(zone) * 6))
 +                      if (nr_slab == 0 && !zone_reclaimable(zone))
                                zone->all_unreclaimable = 1;
                        /*
                         * If we've done a decent amount of scanning and
diff --combined net/ipv4/Kconfig
index e848e6c062cddbc29d8b846227476f778a20e6ab,1cc7ef270d54e59b02519c42c72fd9841052d53a..9e95d7fb6d5ac4d3d19db7f3c39117d9908a35e3
@@@ -46,7 -46,7 +46,7 @@@ config IP_ADVANCED_ROUTE
          rp_filter on use:
  
          echo 1 > /proc/sys/net/ipv4/conf/<device>/rp_filter
 -         and
 +         or
          echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
  
          Note that some distributions enable it in startup scripts.
@@@ -84,7 -84,7 +84,7 @@@ config IP_FIB_TRI
  
          An experimental study of compression methods for dynamic tries
          Stefan Nilsson and Matti Tikkanen. Algorithmica, 33(1):19-33, 2002.
-         http://www.nada.kth.se/~snilsson/public/papers/dyntrie2/
+         <http://www.csc.kth.se/~snilsson/software/dyntrie2/>
  
  endchoice
  
@@@ -215,15 -215,8 +215,15 @@@ config NET_IPI
          be inserted in and removed from the running kernel whenever you
          want). Most people won't need this and can say N.
  
 +config NET_IPGRE_DEMUX
 +      tristate "IP: GRE demultiplexer"
 +      help
 +       This is helper module to demultiplex GRE packets on GRE version field criteria.
 +       Required by ip_gre and pptp modules.
 +
  config NET_IPGRE
        tristate "IP: GRE tunnels over IP"
 +      depends on (IPV6 || IPV6=n) && NET_IPGRE_DEMUX
        help
          Tunneling means encapsulating data of one protocol type within
          another protocol and sending it over a channel that understands the
@@@ -419,7 -412,7 +419,7 @@@ config INET_XFRM_MODE_BEE
          If unsure, say Y.
  
  config INET_LRO
 -      bool "Large Receive Offload (ipv4/tcp)"
 +      tristate "Large Receive Offload (ipv4/tcp)"
        default y
        ---help---
          Support for Large Receive Offload (ipv4/tcp).
@@@ -562,7 -555,7 +562,7 @@@ config TCP_CONG_VEN
        distinguishing to circumvent the difficult judgment of the packet loss
        type. TCP Veno cuts down less congestion window in response to random
        loss packets.
-       See http://www.ntu.edu.sg/home5/ZHOU0022/papers/CPFu03a.pdf
+       See <http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1177186> 
  
  config TCP_CONG_YEAH
        tristate "YeAH TCP"
diff --combined net/ipv4/fib_trie.c
index cd5e13aee7d5b689b76c834673d70dd7c334361e,2230ae3bf20eef3d295b45561c923fdae7c660db..b14450895102ae385f2c603eb1b591bc3170f994
@@@ -16,7 -16,7 +16,7 @@@
   *
   * An experimental study of compression methods for dynamic tries
   * Stefan Nilsson and Matti Tikkanen. Algorithmica, 33(1):19-33, 2002.
-  * http://www.nada.kth.se/~snilsson/public/papers/dyntrie2/
+  * http://www.csc.kth.se/~snilsson/software/dyntrie2/
   *
   *
   * IP-address lookup using LC-tries. Stefan Nilsson and Gunnar Karlsson
@@@ -186,7 -186,7 +186,7 @@@ static inline struct tnode *node_parent
  {
        struct tnode *ret = node_parent(node);
  
 -      return rcu_dereference(ret);
 +      return rcu_dereference_rtnl(ret);
  }
  
  /* Same as rcu_assign_pointer
@@@ -209,7 -209,9 +209,7 @@@ static inline struct node *tnode_get_ch
  {
        struct node *ret = tnode_get_child(tn, i);
  
 -      return rcu_dereference_check(ret,
 -                                   rcu_read_lock_held() ||
 -                                   lockdep_rtnl_is_held());
 +      return rcu_dereference_rtnl(ret);
  }
  
  static inline int tnode_child_length(const struct tnode *tn)
@@@ -455,8 -457,8 +455,8 @@@ static struct tnode *tnode_new(t_key ke
                tn->empty_children = 1<<bits;
        }
  
 -      pr_debug("AT %p s=%u %lu\n", tn, (unsigned int) sizeof(struct tnode),
 -               (unsigned long) (sizeof(struct node) << bits));
 +      pr_debug("AT %p s=%zu %zu\n", tn, sizeof(struct tnode),
 +               sizeof(struct node) << bits);
        return tn;
  }
  
@@@ -605,10 -607,11 +605,10 @@@ static struct node *resize(struct trie 
  
        /* Keep root node larger  */
  
 -      if (!node_parent((struct node*) tn)) {
 +      if (!node_parent((struct node *)tn)) {
                inflate_threshold_use = inflate_threshold_root;
                halve_threshold_use = halve_threshold_root;
 -      }
 -      else {
 +      } else {
                inflate_threshold_use = inflate_threshold;
                halve_threshold_use = halve_threshold;
        }
        check_tnode(tn);
  
        /* Return if at least one inflate is run */
 -      ifmax_work != MAX_WORK)
 +      if (max_work != MAX_WORK)
                return (struct node *) tn;
  
        /*
@@@ -961,7 -964,9 +961,7 @@@ fib_find_node(struct trie *t, u32 key
        struct node *n;
  
        pos = 0;
 -      n = rcu_dereference_check(t->trie,
 -                                rcu_read_lock_held() ||
 -                                lockdep_rtnl_is_held());
 +      n = rcu_dereference_rtnl(t->trie);
  
        while (n != NULL &&  NODE_TYPE(n) == T_TNODE) {
                tn = (struct tnode *) n;
@@@ -1342,7 -1347,7 +1342,7 @@@ err
  /* should be called with rcu_read_lock */
  static int check_leaf(struct trie *t, struct leaf *l,
                      t_key key,  const struct flowi *flp,
 -                    struct fib_result *res)
 +                    struct fib_result *res, int fib_flags)
  {
        struct leaf_info *li;
        struct hlist_head *hhead = &l->list;
                if (l->key != (key & ntohl(mask)))
                        continue;
  
 -              err = fib_semantic_match(&li->falh, flp, res, plen);
 +              err = fib_semantic_match(&li->falh, flp, res, plen, fib_flags);
  
  #ifdef CONFIG_IP_FIB_TRIE_STATS
                if (err <= 0)
  }
  
  int fib_table_lookup(struct fib_table *tb, const struct flowi *flp,
 -                   struct fib_result *res)
 +                   struct fib_result *res, int fib_flags)
  {
        struct trie *t = (struct trie *) tb->tb_data;
        int ret;
        t_key cindex = 0;
        int current_prefix_length = KEYLENGTH;
        struct tnode *cn;
 -      t_key node_prefix, key_prefix, pref_mismatch;
 -      int mp;
 +      t_key pref_mismatch;
  
        rcu_read_lock();
  
  
        /* Just a leaf? */
        if (IS_LEAF(n)) {
 -              ret = check_leaf(t, (struct leaf *)n, key, flp, res);
 +              ret = check_leaf(t, (struct leaf *)n, key, flp, res, fib_flags);
                goto found;
        }
  
                }
  
                if (IS_LEAF(n)) {
 -                      ret = check_leaf(t, (struct leaf *)n, key, flp, res);
 +                      ret = check_leaf(t, (struct leaf *)n, key, flp, res, fib_flags);
                        if (ret > 0)
                                goto backtrace;
                        goto found;
                 * matching prefix.
                 */
  
 -              node_prefix = mask_pfx(cn->key, cn->pos);
 -              key_prefix = mask_pfx(key, cn->pos);
 -              pref_mismatch = key_prefix^node_prefix;
 -              mp = 0;
 +              pref_mismatch = mask_pfx(cn->key ^ key, cn->pos);
  
                /*
                 * In short: If skipped bits in this node do not match
                 * state.directly.
                 */
                if (pref_mismatch) {
 -                      while (!(pref_mismatch & (1<<(KEYLENGTH-1)))) {
 -                              mp++;
 -                              pref_mismatch = pref_mismatch << 1;
 -                      }
 -                      key_prefix = tkey_extract_bits(cn->key, mp, cn->pos-mp);
 +                      int mp = KEYLENGTH - fls(pref_mismatch);
  
 -                      if (key_prefix != 0)
 +                      if (tkey_extract_bits(cn->key, mp, cn->pos - mp) != 0)
                                goto backtrace;
  
                        if (current_prefix_length >= cn->pos)
@@@ -1733,14 -1746,14 +1733,14 @@@ static struct leaf *leaf_walk_rcu(struc
  
                /* Node empty, walk back up to parent */
                c = (struct node *) p;
 -      } while ( (p = node_parent_rcu(c)) != NULL);
 +      } while ((p = node_parent_rcu(c)) != NULL);
  
        return NULL; /* Root of trie */
  }
  
  static struct leaf *trie_firstleaf(struct trie *t)
  {
 -      struct tnode *n = (struct tnode *) rcu_dereference(t->trie);
 +      struct tnode *n = (struct tnode *)rcu_dereference_rtnl(t->trie);
  
        if (!n)
                return NULL;
@@@ -1838,8 -1851,7 +1838,8 @@@ void fib_table_select_default(struct fi
                if (!next_fi->fib_nh[0].nh_gw ||
                    next_fi->fib_nh[0].nh_scope != RT_SCOPE_LINK)
                        continue;
 -              fa->fa_state |= FA_S_ACCESSED;
 +
 +              fib_alias_accessed(fa);
  
                if (fi == NULL) {
                        if (next_fi != res->fi)
@@@ -2027,14 -2039,14 +2027,14 @@@ struct fib_trie_iter 
        struct seq_net_private p;
        struct fib_table *tb;
        struct tnode *tnode;
 -      unsigned index;
 -      unsigned depth;
 +      unsigned int index;
 +      unsigned int depth;
  };
  
  static struct node *fib_trie_get_next(struct fib_trie_iter *iter)
  {
        struct tnode *tn = iter->tnode;
 -      unsigned cindex = iter->index;
 +      unsigned int cindex = iter->index;
        struct tnode *p;
  
        /* A single entry routing table */
@@@ -2143,7 -2155,7 +2143,7 @@@ static void trie_collect_stats(struct t
   */
  static void trie_show_stats(struct seq_file *seq, struct trie_stat *stat)
  {
 -      unsigned i, max, pointers, bytes, avdepth;
 +      unsigned int i, max, pointers, bytes, avdepth;
  
        if (stat->leaves)
                avdepth = stat->totdepth*100 / stat->leaves;
@@@ -2340,8 -2352,7 +2340,8 @@@ static void fib_trie_seq_stop(struct se
  
  static void seq_indent(struct seq_file *seq, int n)
  {
 -      while (n-- > 0) seq_puts(seq, "   ");
 +      while (n-- > 0)
 +              seq_puts(seq, "   ");
  }
  
  static inline const char *rtn_scope(char *buf, size_t len, enum rt_scope_t s)
@@@ -2373,7 -2384,7 +2373,7 @@@ static const char *const rtn_type_names
        [RTN_XRESOLVE] = "XRESOLVE",
  };
  
 -static inline const char *rtn_type(char *buf, size_t len, unsigned t)
 +static inline const char *rtn_type(char *buf, size_t len, unsigned int t)
  {
        if (t < __RTN_MAX && rtn_type_names[t])
                return rtn_type_names[t];
@@@ -2529,12 -2540,13 +2529,12 @@@ static void fib_route_seq_stop(struct s
        rcu_read_unlock();
  }
  
 -static unsigned fib_flag_trans(int type, __be32 mask, const struct fib_info *fi)
 +static unsigned int fib_flag_trans(int type, __be32 mask, const struct fib_info *fi)
  {
 -      static unsigned type2flags[RTN_MAX + 1] = {
 -              [7] = RTF_REJECT, [8] = RTF_REJECT,
 -      };
 -      unsigned flags = type2flags[type];
 +      unsigned int flags = 0;
  
 +      if (type == RTN_UNREACHABLE || type == RTN_PROHIBIT)
 +              flags = RTF_REJECT;
        if (fi && fi->fib_nh->nh_gw)
                flags |= RTF_GATEWAY;
        if (mask == htonl(0xFFFFFFFF))
  /*
   *    This outputs /proc/net/route.
   *    The format of the file is not supposed to be changed
 - *    and needs to be same as fib_hash output to avoid breaking
 + *    and needs to be same as fib_hash output to avoid breaking
   *    legacy utilities
   */
  static int fib_route_seq_show(struct seq_file *seq, void *v)
  
                list_for_each_entry_rcu(fa, &li->falh, fa_list) {
                        const struct fib_info *fi = fa->fa_info;
 -                      unsigned flags = fib_flag_trans(fa->fa_type, mask, fi);
 +                      unsigned int flags = fib_flag_trans(fa->fa_type, mask, fi);
                        int len;
  
                        if (fa->fa_type == RTN_BROADCAST
index 8e3350643b63e003747661aa46470670773a4b34,d048275a62cb6cfecaa708217d0a7ebfa30b035d..babd1a2bae5f1b6b35499d5e32a2a6c43c8c7fec
@@@ -147,7 -147,7 +147,7 @@@ config IP_NF_TARGET_ULO
          which can only be viewed through syslog.
  
          The appropriate userspace logging daemon (ulogd) may be obtained from
-         <http://www.gnumonks.org/projects/ulogd/>
+         <http://www.netfilter.org/projects/ulogd/index.html>
  
          To compile it as a module, choose M here.  If unsure, say N.
  
@@@ -324,10 -324,10 +324,10 @@@ config IP_NF_TARGET_EC
  
  config IP_NF_TARGET_TTL
        tristate '"TTL" target support'
 -      depends on NETFILTER_ADVANCED
 +      depends on NETFILTER_ADVANCED && IP_NF_MANGLE
        select NETFILTER_XT_TARGET_HL
        ---help---
 -      This is a backwards-compat option for the user's convenience
 +      This is a backwards-compatible option for the user's convenience
        (e.g. when running oldconfig). It selects
        CONFIG_NETFILTER_XT_TARGET_HL.
  
diff --combined net/ipv4/tcp_input.c
index ee0df48174989093e24862f61ae316d573cb1703,bccce3424a632de11d5b5ff77741868e76b9a770..3357f69e353d445b51c3178899609245b6720404
@@@ -182,7 -182,7 +182,7 @@@ static void tcp_incr_quickack(struct so
                icsk->icsk_ack.quick = min(quickacks, TCP_MAX_QUICKACKS);
  }
  
 -void tcp_enter_quickack_mode(struct sock *sk)
 +static void tcp_enter_quickack_mode(struct sock *sk)
  {
        struct inet_connection_sock *icsk = inet_csk(sk);
        tcp_incr_quickack(sk);
@@@ -428,10 -428,10 +428,10 @@@ EXPORT_SYMBOL(tcp_initialize_rcv_mss)
   *
   * The algorithm for RTT estimation w/o timestamps is based on
   * Dynamic Right-Sizing (DRS) by Wu Feng and Mike Fisk of LANL.
-  * <http://www.lanl.gov/radiant/website/pubs/drs/lacsi2001.ps>
+  * <http://public.lanl.gov/radiant/pubs.html#DRS>
   *
   * More detail on this code can be found at
-  * <http://www.psc.edu/~jheffner/senior_thesis.ps>,
+  * <http://staff.psc.edu/jheffner/>,
   * though this reference is out of date.  A new paper
   * is pending.
   */
@@@ -805,12 -805,25 +805,12 @@@ void tcp_update_metrics(struct sock *sk
        }
  }
  
 -/* Numbers are taken from RFC3390.
 - *
 - * John Heffner states:
 - *
 - *    The RFC specifies a window of no more than 4380 bytes
 - *    unless 2*MSS > 4380.  Reading the pseudocode in the RFC
 - *    is a bit misleading because they use a clamp at 4380 bytes
 - *    rather than use a multiplier in the relevant range.
 - */
  __u32 tcp_init_cwnd(struct tcp_sock *tp, struct dst_entry *dst)
  {
        __u32 cwnd = (dst ? dst_metric(dst, RTAX_INITCWND) : 0);
  
 -      if (!cwnd) {
 -              if (tp->mss_cache > 1460)
 -                      cwnd = 2;
 -              else
 -                      cwnd = (tp->mss_cache > 1095) ? 3 : 4;
 -      }
 +      if (!cwnd)
 +              cwnd = rfc3390_bytes_to_packets(tp->mss_cache);
        return min_t(__u32, cwnd, tp->snd_cwnd_clamp);
  }
  
@@@ -2301,7 -2314,7 +2301,7 @@@ static inline int tcp_dupack_heuristics
  
  static inline int tcp_skb_timedout(struct sock *sk, struct sk_buff *skb)
  {
 -      return (tcp_time_stamp - TCP_SKB_CB(skb)->when > inet_csk(sk)->icsk_rto);
 +      return tcp_time_stamp - TCP_SKB_CB(skb)->when > inet_csk(sk)->icsk_rto;
  }
  
  static inline int tcp_head_timedout(struct sock *sk)
@@@ -2495,7 -2508,7 +2495,7 @@@ static void tcp_timeout_skbs(struct soc
  /* Mark head of queue up as lost. With RFC3517 SACK, the packets is
   * is against sacked "cnt", otherwise it's against facked "cnt"
   */
 -static void tcp_mark_head_lost(struct sock *sk, int packets)
 +static void tcp_mark_head_lost(struct sock *sk, int packets, int mark_head)
  {
        struct tcp_sock *tp = tcp_sk(sk);
        struct sk_buff *skb;
        int err;
        unsigned int mss;
  
 -      if (packets == 0)
 -              return;
 -
        WARN_ON(packets > tp->packets_out);
        if (tp->lost_skb_hint) {
                skb = tp->lost_skb_hint;
                cnt = tp->lost_cnt_hint;
 +              /* Head already handled? */
 +              if (mark_head && skb != tcp_write_queue_head(sk))
 +                      return;
        } else {
                skb = tcp_write_queue_head(sk);
                cnt = 0;
                        cnt += tcp_skb_pcount(skb);
  
                if (cnt > packets) {
 -                      if (tcp_is_sack(tp) || (oldcnt >= packets))
 +                      if ((tcp_is_sack(tp) && !tcp_is_fack(tp)) ||
 +                          (oldcnt >= packets))
                                break;
  
                        mss = skb_shinfo(skb)->gso_size;
                }
  
                tcp_skb_mark_lost(tp, skb);
 +
 +              if (mark_head)
 +                      break;
        }
        tcp_verify_left_out(tp);
  }
@@@ -2558,18 -2567,17 +2558,18 @@@ static void tcp_update_scoreboard(struc
        struct tcp_sock *tp = tcp_sk(sk);
  
        if (tcp_is_reno(tp)) {
 -              tcp_mark_head_lost(sk, 1);
 +              tcp_mark_head_lost(sk, 1, 1);
        } else if (tcp_is_fack(tp)) {
                int lost = tp->fackets_out - tp->reordering;
                if (lost <= 0)
                        lost = 1;
 -              tcp_mark_head_lost(sk, lost);
 +              tcp_mark_head_lost(sk, lost, 0);
        } else {
                int sacked_upto = tp->sacked_out - tp->reordering;
 -              if (sacked_upto < fast_rexmit)
 -                      sacked_upto = fast_rexmit;
 -              tcp_mark_head_lost(sk, sacked_upto);
 +              if (sacked_upto >= 0)
 +                      tcp_mark_head_lost(sk, sacked_upto, 0);
 +              else if (fast_rexmit)
 +                      tcp_mark_head_lost(sk, 1, 1);
        }
  
        tcp_timeout_skbs(sk);
@@@ -2878,7 -2886,7 +2878,7 @@@ static void tcp_mtup_probe_success(stru
                       icsk->icsk_mtup.probe_size;
        tp->snd_cwnd_cnt = 0;
        tp->snd_cwnd_stamp = tcp_time_stamp;
 -      tp->rcv_ssthresh = tcp_current_ssthresh(sk);
 +      tp->snd_ssthresh = tcp_current_ssthresh(sk);
  
        icsk->icsk_mtup.search_low = icsk->icsk_mtup.probe_size;
        icsk->icsk_mtup.probe_size = 0;
@@@ -2975,7 -2983,7 +2975,7 @@@ static void tcp_fastretrans_alert(struc
            before(tp->snd_una, tp->high_seq) &&
            icsk->icsk_ca_state != TCP_CA_Open &&
            tp->fackets_out > tp->reordering) {
 -              tcp_mark_head_lost(sk, tp->fackets_out - tp->reordering);
 +              tcp_mark_head_lost(sk, tp->fackets_out - tp->reordering, 0);
                NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPLOSS);
        }
  
@@@ -3403,8 -3411,8 +3403,8 @@@ static void tcp_ack_probe(struct sock *
  
  static inline int tcp_ack_is_dubious(const struct sock *sk, const int flag)
  {
 -      return (!(flag & FLAG_NOT_DUP) || (flag & FLAG_CA_ALERT) ||
 -              inet_csk(sk)->icsk_ca_state != TCP_CA_Open);
 +      return !(flag & FLAG_NOT_DUP) || (flag & FLAG_CA_ALERT) ||
 +              inet_csk(sk)->icsk_ca_state != TCP_CA_Open;
  }
  
  static inline int tcp_may_raise_cwnd(const struct sock *sk, const int flag)
@@@ -3421,9 -3429,9 +3421,9 @@@ static inline int tcp_may_update_window
                                        const u32 ack, const u32 ack_seq,
                                        const u32 nwin)
  {
 -      return (after(ack, tp->snd_una) ||
 +      return  after(ack, tp->snd_una) ||
                after(ack_seq, tp->snd_wl1) ||
 -              (ack_seq == tp->snd_wl1 && nwin > tp->snd_wnd));
 +              (ack_seq == tp->snd_wl1 && nwin > tp->snd_wnd);
  }
  
  /* Update our send window.
@@@ -4040,8 -4048,6 +4040,8 @@@ static void tcp_reset(struct sock *sk
        default:
                sk->sk_err = ECONNRESET;
        }
 +      /* This barrier is coupled with smp_rmb() in tcp_poll() */
 +      smp_wmb();
  
        if (!sock_flag(sk, SOCK_DEAD))
                sk->sk_error_report(sk);
index 0993bd454ea5811b3b72a66e33a49a1288ea7c04,36f43cac8eabe0032e8785e2926aad0b6a608c56..7fa86373de414a810be41e6973027d0b31c12168
@@@ -166,7 -166,7 +166,7 @@@ irnet_ctrl_write(irnet_socket *    ap
      }
  
    /* Success : we have parsed all commands successfully */
 -  return(count);
 +  return count;
  }
  
  #ifdef INITIAL_DISCOVERY
@@@ -300,7 -300,7 +300,7 @@@ irnet_ctrl_read(irnet_socket *     ap
        }
  
        DEXIT(CTRL_TRACE, "\n");
 -      return(strlen(event));
 +      return strlen(event);
      }
  #endif /* INITIAL_DISCOVERY */
  
      }
  
    DEXIT(CTRL_TRACE, "\n");
 -  return(strlen(event));
 +  return strlen(event);
  }
  
  /*------------------------------------------------------------------*/
@@@ -480,6 -480,7 +480,6 @@@ dev_irnet_open(struct inode *      inode
    ap = kzalloc(sizeof(*ap), GFP_KERNEL);
    DABORT(ap == NULL, -ENOMEM, FS_ERROR, "Can't allocate struct irnet...\n");
  
 -  lock_kernel();
    /* initialize the irnet structure */
    ap->file = file;
  
      {
        DERROR(FS_ERROR, "Can't setup IrDA link...\n");
        kfree(ap);
 -      unlock_kernel();
 +
        return err;
      }
  
    /* For the control channel */
    ap->event_index = irnet_events.index;       /* Cancel all past events */
  
 +  mutex_init(&ap->lock);
 +
    /* Put our stuff where we will be able to find it later */
    file->private_data = ap;
  
    DEXIT(FS_TRACE, " - ap=0x%p\n", ap);
 -  unlock_kernel();
 +
    return 0;
  }
  
@@@ -624,7 -623,7 +624,7 @@@ dev_irnet_poll(struct file *       file
      mask |= irnet_ctrl_poll(ap, file, wait);
  
    DEXIT(FS_TRACE, " - mask=0x%X\n", mask);
 -  return(mask);
 +  return mask;
  }
  
  /*------------------------------------------------------------------*/
@@@ -664,10 -663,8 +664,10 @@@ dev_irnet_ioctl
        if((val == N_SYNC_PPP) || (val == N_PPP))
        {
          DEBUG(FS_INFO, "Entering PPP discipline.\n");
-         /* PPP channel setup (ap->chan in configued in dev_irnet_open())*/
+         /* PPP channel setup (ap->chan in configured in dev_irnet_open())*/
 -        lock_kernel();
 +        if (mutex_lock_interruptible(&ap->lock))
 +                return -EINTR;
 +
          err = ppp_register_channel(&ap->chan);
          if(err == 0)
            {
            }
          else
            DERROR(FS_ERROR, "Can't setup PPP channel...\n");
 -          unlock_kernel();
 +
 +          mutex_unlock(&ap->lock);
        }
        else
        {
          /* In theory, should be N_TTY */
          DEBUG(FS_INFO, "Exiting PPP discipline.\n");
          /* Disconnect from the generic PPP layer */
 -        lock_kernel();
 +        if (mutex_lock_interruptible(&ap->lock))
 +                return -EINTR;
 +
          if(ap->ppp_open)
            {
              ap->ppp_open = 0;
          else
            DERROR(FS_ERROR, "Channel not registered !\n");
          err = 0;
 -        unlock_kernel();
 +
 +        mutex_unlock(&ap->lock);
        }
        break;
  
        /* Query PPP channel and unit number */
      case PPPIOCGCHAN:
 -      lock_kernel();
 +      if (mutex_lock_interruptible(&ap->lock))
 +            return -EINTR;
 +
        if(ap->ppp_open && !put_user(ppp_channel_index(&ap->chan),
                                                (int __user *)argp))
        err = 0;
 -      unlock_kernel();
 +
 +      mutex_unlock(&ap->lock);
        break;
      case PPPIOCGUNIT:
 -      lock_kernel();
 +      if (mutex_lock_interruptible(&ap->lock))
 +            return -EINTR;
 +
        if(ap->ppp_open && !put_user(ppp_unit_number(&ap->chan),
                                                (int __user *)argp))
          err = 0;
 -      unlock_kernel();
 +
 +      mutex_unlock(&ap->lock);
        break;
  
        /* All these ioctls can be passed both directly and from ppp_generic,
        if(!capable(CAP_NET_ADMIN))
        err = -EPERM;
        else {
 -      lock_kernel();
 +      if (mutex_lock_interruptible(&ap->lock))
 +            return -EINTR;
 +
        err = ppp_irnet_ioctl(&ap->chan, cmd, arg);
 -      unlock_kernel();
 +
 +      mutex_unlock(&ap->lock);
        }
        break;
  
        /* Get termios */
      case TCGETS:
        DEBUG(FS_INFO, "Get termios.\n");
 -      lock_kernel();
 +      if (mutex_lock_interruptible(&ap->lock))
 +            return -EINTR;
 +
  #ifndef TCGETS2
        if(!kernel_termios_to_user_termios((struct termios __user *)argp, &ap->termios))
        err = 0;
        if(kernel_termios_to_user_termios_1((struct termios __user *)argp, &ap->termios))
        err = 0;
  #endif
 -      unlock_kernel();
 +
 +      mutex_unlock(&ap->lock);
        break;
        /* Set termios */
      case TCSETSF:
        DEBUG(FS_INFO, "Set termios.\n");
 -      lock_kernel();
 +      if (mutex_lock_interruptible(&ap->lock))
 +            return -EINTR;
 +
  #ifndef TCGETS2
        if(!user_termios_to_kernel_termios(&ap->termios, (struct termios __user *)argp))
        err = 0;
        if(!user_termios_to_kernel_termios_1(&ap->termios, (struct termios __user *)argp))
        err = 0;
  #endif
 -      unlock_kernel();
 +
 +      mutex_unlock(&ap->lock);
        break;
  
        /* Set DTR/RTS */
         * We should also worry that we don't accept junk here and that
         * we get rid of our own buffers */
  #ifdef FLUSH_TO_PPP
 -      lock_kernel();
 +      if (mutex_lock_interruptible(&ap->lock))
 +            return -EINTR;
        ppp_output_wakeup(&ap->chan);
 -      unlock_kernel();
 +      mutex_unlock(&ap->lock);
  #endif /* FLUSH_TO_PPP */
        err = 0;
        break;
diff --combined net/sunrpc/rpc_pipe.c
index 28bcd52e3ce97428c296989cdb637d71f31a6693,1f7fc502a5080a79d255769f144ea3450ec77e34..52f252432144ab439c9083acf20e8d487fbbd12d
@@@ -27,6 -27,7 +27,6 @@@
  #include <linux/workqueue.h>
  #include <linux/sunrpc/rpc_pipe_fs.h>
  #include <linux/sunrpc/cache.h>
 -#include <linux/smp_lock.h>
  
  static struct vfsmount *rpc_mount __read_mostly;
  static int rpc_mount_count;
@@@ -47,7 -48,7 +47,7 @@@ static void rpc_purge_list(struct rpc_i
                return;
        do {
                msg = list_entry(head->next, struct rpc_pipe_msg, list);
 -              list_del(&msg->list);
 +              list_del_init(&msg->list);
                msg->errno = err;
                destroy_msg(msg);
        } while (!list_empty(head));
@@@ -203,11 -204,11 +203,11 @@@ rpc_pipe_release(struct inode *inode, s
        mutex_lock(&inode->i_mutex);
        if (rpci->ops == NULL)
                goto out;
-       msg = (struct rpc_pipe_msg *)filp->private_data;
+       msg = filp->private_data;
        if (msg != NULL) {
                spin_lock(&inode->i_lock);
                msg->errno = -EAGAIN;
 -              list_del(&msg->list);
 +              list_del_init(&msg->list);
                spin_unlock(&inode->i_lock);
                rpci->ops->destroy_msg(msg);
        }
@@@ -267,7 -268,7 +267,7 @@@ rpc_pipe_read(struct file *filp, char _
        if (res < 0 || msg->len == msg->copied) {
                filp->private_data = NULL;
                spin_lock(&inode->i_lock);
 -              list_del(&msg->list);
 +              list_del_init(&msg->list);
                spin_unlock(&inode->i_lock);
                rpci->ops->destroy_msg(msg);
        }
@@@ -308,33 -309,40 +308,33 @@@ rpc_pipe_poll(struct file *filp, struc
        return mask;
  }
  
 -static int
 -rpc_pipe_ioctl_unlocked(struct file *filp, unsigned int cmd, unsigned long arg)
 +static long
 +rpc_pipe_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
  {
 -      struct rpc_inode *rpci = RPC_I(filp->f_path.dentry->d_inode);
 +      struct inode *inode = filp->f_path.dentry->d_inode;
 +      struct rpc_inode *rpci = RPC_I(inode);
        int len;
  
        switch (cmd) {
        case FIONREAD:
 -              if (rpci->ops == NULL)
 +              spin_lock(&inode->i_lock);
 +              if (rpci->ops == NULL) {
 +                      spin_unlock(&inode->i_lock);
                        return -EPIPE;
 +              }
                len = rpci->pipelen;
                if (filp->private_data) {
                        struct rpc_pipe_msg *msg;
-                       msg = (struct rpc_pipe_msg *)filp->private_data;
+                       msg = filp->private_data;
                        len += msg->len - msg->copied;
                }
 +              spin_unlock(&inode->i_lock);
                return put_user(len, (int __user *)arg);
        default:
                return -EINVAL;
        }
  }
  
 -static long
 -rpc_pipe_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 -{
 -      long ret;
 -
 -      lock_kernel();
 -      ret = rpc_pipe_ioctl_unlocked(filp, cmd, arg);
 -      unlock_kernel();
 -
 -      return ret;
 -}
 -
  static const struct file_operations rpc_pipe_fops = {
        .owner          = THIS_MODULE,
        .llseek         = no_llseek,
@@@ -363,23 -371,21 +363,23 @@@ rpc_show_info(struct seq_file *m, void 
  static int
  rpc_info_open(struct inode *inode, struct file *file)
  {
 -      struct rpc_clnt *clnt;
 +      struct rpc_clnt *clnt = NULL;
        int ret = single_open(file, rpc_show_info, NULL);
  
        if (!ret) {
                struct seq_file *m = file->private_data;
 -              mutex_lock(&inode->i_mutex);
 -              clnt = RPC_I(inode)->private;
 -              if (clnt) {
 -                      kref_get(&clnt->cl_kref);
 +
 +              spin_lock(&file->f_path.dentry->d_lock);
 +              if (!d_unhashed(file->f_path.dentry))
 +                      clnt = RPC_I(inode)->private;
 +              if (clnt != NULL && atomic_inc_not_zero(&clnt->cl_count)) {
 +                      spin_unlock(&file->f_path.dentry->d_lock);
                        m->private = clnt;
                } else {
 +                      spin_unlock(&file->f_path.dentry->d_lock);
                        single_release(inode, file);
                        ret = -EINVAL;
                }
 -              mutex_unlock(&inode->i_mutex);
        }
        return ret;
  }
diff --combined sound/pci/intel8x0.c
index 46774924957643874171c1c4e0dfd9a20672d2f3,a2999d678918103ff94c6ff15d9a7406b0f21c20..400f9ebd243e84ebf595cb4cba69f6a3cb3552b7
@@@ -716,7 -716,7 +716,7 @@@ static void snd_intel8x0_setup_periods(
   * Intel 82443MX running a 100MHz processor system bus has a hardware bug,
   * which aborts PCI busmaster for audio transfer.  A workaround is to set
   * the pages as non-cached.  For details, see the errata in
-  *    http://www.intel.com/design/chipsets/specupdt/245051.htm
+  *    http://download.intel.com/design/chipsets/specupdt/24505108.pdf
   */
  static void fill_nocache(void *buf, int size, int nocache)
  {
@@@ -1774,12 -1774,6 +1774,12 @@@ static struct ac97_quirk ac97_quirks[] 
                .name = "HP/Compaq nx7010",
                .type = AC97_TUNE_MUTE_LED
          },
 +      {
 +              .subvendor = 0x1014,
 +              .subdevice = 0x0534,
 +              .name = "ThinkPad X31",
 +              .type = AC97_TUNE_INV_EAPD
 +      },
        {
                .subvendor = 0x1014,
                .subdevice = 0x1f00,