Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 4 Aug 2010 18:47:58 +0000 (11:47 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 4 Aug 2010 18:47:58 +0000 (11:47 -0700)
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1443 commits)
  phy/marvell: add 88ec048 support
  igb: Program MDICNFG register prior to PHY init
  e1000e: correct MAC-PHY interconnect register offset for 82579
  hso: Add new product ID
  can: Add driver for esd CAN-USB/2 device
  l2tp: fix export of header file for userspace
  can-raw: Fix skb_orphan_try handling
  Revert "net: remove zap_completion_queue"
  net: cleanup inclusion
  phy/marvell: add 88e1121 interface mode support
  u32: negative offset fix
  net: Fix a typo from "dev" to "ndev"
  igb: Use irq_synchronize per vector when using MSI-X
  ixgbevf: fix null pointer dereference due to filter being set for VLAN 0
  e1000e: Fix irq_synchronize in MSI-X case
  e1000e: register pm_qos request on hardware activation
  ip_fragment: fix subtracting PPPOE_SES_HLEN from mtu twice
  net: Add getsockopt support for TCP thin-streams
  cxgb4: update driver version
  cxgb4: add new PCI IDs
  ...

Manually fix up conflicts in:
 - drivers/net/e1000e/netdev.c: due to pm_qos registration
   infrastructure changes
 - drivers/net/phy/marvell.c: conflict between adding 88ec048 support
   and cleaning up the IDs
 - drivers/net/wireless/ipw2x00/ipw2100.c: trivial ipw2100_pm_qos_req
   conflict (registration change vs marking it static)

19 files changed:
1  2 
Documentation/feature-removal-schedule.txt
Documentation/kernel-parameters.txt
MAINTAINERS
arch/x86/include/asm/system.h
drivers/base/core.c
drivers/infiniband/hw/cxgb4/cm.c
drivers/net/e1000e/netdev.c
drivers/net/igbvf/netdev.c
drivers/net/phy/marvell.c
drivers/net/tulip/de2104x.c
drivers/net/wireless/ipw2x00/ipw2100.c
drivers/parisc/led.c
drivers/vhost/net.c
firmware/Makefile
include/linux/cgroup.h
include/linux/marvell_phy.h
include/linux/netdevice.h
include/linux/pci_ids.h
kernel/cgroup.c

index 9699157c25c88ef1fd55c0b4eccb93ac1c6060a9,92f021aac92c4449c8891bcecba6b094d3aa2359..2f1e5b621d0ed28a63994b99c70f427a65b3e797
@@@ -303,15 -303,6 +303,6 @@@ Who:      Johannes Berg <johannes@sipsolutio
  
  ---------------------------
  
- What: CONFIG_NF_CT_ACCT
- When: 2.6.29
- Why:  Accounting can now be enabled/disabled without kernel recompilation.
-       Currently used only to set a default value for a feature that is also
-       controlled by a kernel/module/sysfs/sysctl parameter.
- Who:  Krzysztof Piotr Oledzki <ole@ans.pl>
- ---------------------------
  What: sysfs ui for changing p4-clockmod parameters
  When: September 2009
  Why:  See commits 129f8ae9b1b5be94517da76009ea956e89104ce8 and
@@@ -377,6 -368,16 +368,6 @@@ Who:      Eric Paris <eparis@redhat.com
  
  ----------------------------
  
 -What: lock_policy_rwsem_* and unlock_policy_rwsem_* will not be
 -      exported interface anymore.
 -When: 2.6.33
 -Why:  cpu_policy_rwsem has a new cleaner definition making it local to
 -      cpufreq core and contained inside cpufreq.c. Other dependent
 -      drivers should not use it in order to safely avoid lockdep issues.
 -Who:  Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
 -
 -----------------------------
 -
  What: sound-slot/service-* module aliases and related clutters in
        sound/sound_core.c
  When: August 2010
@@@ -449,6 -450,57 +440,6 @@@ Who:      Corentin Chary <corentin.chary@gma
  
  ----------------------------
  
 -What: usbvideo quickcam_messenger driver
 -When: 2.6.35
 -Files:        drivers/media/video/usbvideo/quickcam_messenger.[ch]
 -Why:  obsolete v4l1 driver replaced by gspca_stv06xx
 -Who:  Hans de Goede <hdegoede@redhat.com>
 -
 -----------------------------
 -
 -What: ov511 v4l1 driver
 -When: 2.6.35
 -Files:        drivers/media/video/ov511.[ch]
 -Why:  obsolete v4l1 driver replaced by gspca_ov519
 -Who:  Hans de Goede <hdegoede@redhat.com>
 -
 -----------------------------
 -
 -What: w9968cf v4l1 driver
 -When: 2.6.35
 -Files:        drivers/media/video/w9968cf*.[ch]
 -Why:  obsolete v4l1 driver replaced by gspca_ov519
 -Who:  Hans de Goede <hdegoede@redhat.com>
 -
 -----------------------------
 -
 -What: ovcamchip sensor framework
 -When: 2.6.35
 -Files:        drivers/media/video/ovcamchip/*
 -Why:  Only used by obsoleted v4l1 drivers
 -Who:  Hans de Goede <hdegoede@redhat.com>
 -
 -----------------------------
 -
 -What: stv680 v4l1 driver
 -When: 2.6.35
 -Files:        drivers/media/video/stv680.[ch]
 -Why:  obsolete v4l1 driver replaced by gspca_stv0680
 -Who:  Hans de Goede <hdegoede@redhat.com>
 -
 -----------------------------
 -
 -What: zc0301 v4l driver
 -When: 2.6.35
 -Files:        drivers/media/video/zc0301/*
 -Why:  Duplicate functionality with the gspca_zc3xx driver, zc0301 only
 -      supports 2 USB-ID's (because it only supports a limited set of
 -      sensors) wich are also supported by the gspca_zc3xx driver
 -      (which supports 53 USB-ID's in total)
 -Who:  Hans de Goede <hdegoede@redhat.com>
 -
 -----------------------------
 -
  What: sysfs-class-rfkill state file
  When: Feb 2014
  Files:        net/rfkill/core.c
@@@ -477,6 -529,17 +468,6 @@@ Who:      Jan Kiszka <jan.kiszka@web.de
  
  ----------------------------
  
 -What: KVM memory aliases support
 -When: July 2010
 -Why:  Memory aliasing support is used for speeding up guest vga access
 -      through the vga windows.
 -
 -      Modern userspace no longer uses this feature, so it's just bitrotted
 -      code and can be removed with no impact.
 -Who:  Avi Kivity <avi@redhat.com>
 -
 -----------------------------
 -
  What: xtime, wall_to_monotonic
  When: 2.6.36+
  Files:        kernel/time/timekeeping.c include/linux/time.h
@@@ -487,6 -550,16 +478,6 @@@ Who:      John Stultz <johnstul@us.ibm.com
  
  ----------------------------
  
 -What: KVM kernel-allocated memory slots
 -When: July 2010
 -Why:  Since 2.6.25, kvm supports user-allocated memory slots, which are
 -      much more flexible than kernel-allocated slots.  All current userspace
 -      supports the newer interface and this code can be removed with no
 -      impact.
 -Who:  Avi Kivity <avi@redhat.com>
 -
 -----------------------------
 -
  What: KVM paravirt mmu host support
  When: January 2011
  Why:  The paravirt mmu host support is slower than non-paravirt mmu, both
@@@ -496,6 -569,15 +487,6 @@@ Who:      Avi Kivity <avi@redhat.com
  
  ----------------------------
  
 -What:         "acpi=ht" boot option
 -When: 2.6.35
 -Why:  Useful in 2003, implementation is a hack.
 -      Generally invoked by accident today.
 -      Seen as doing more harm than good.
 -Who:  Len Brown <len.brown@intel.com>
 -
 -----------------------------
 -
  What: iwlwifi 50XX module parameters
  When: 2.6.40
  Why:  The "..50" modules parameters were used to configure 5000 series and
@@@ -565,10 -647,3 +556,10 @@@ Who:     Stefan Richter <stefanr@s5r6.in-be
  
  ----------------------------
  
 +What: The acpi_sleep=s4_nonvs command line option
 +When: 2.6.37
 +Files:        arch/x86/kernel/acpi/sleep.c
 +Why:  superseded by acpi_sleep=nonvs
 +Who:  Rafael J. Wysocki <rjw@sisk.pl>
 +
 +----------------------------
index b61f89fa01c193def3bc453f2422c4cc40ac06bb,cee62515ffa102dd0861c4f07c4b34981380cdaf..d9239d5f3ad38ee2aca01e1c6cf25f4c1a6c82a5
@@@ -93,7 -93,6 +93,7 @@@ parameter is applicable
                        Documentation/scsi/.
        SECURITY Different security models are enabled.
        SELINUX SELinux support is enabled.
 +      APPARMOR AppArmor support is enabled.
        SERIAL  Serial support is enabled.
        SH      SuperH architecture is enabled.
        SMP     The kernel is an SMP kernel.
@@@ -255,8 -254,8 +255,8 @@@ and is between 256 and 4096 characters
                        control method, with respect to putting devices into
                        low power states, to be enforced (the ACPI 2.0 ordering
                        of _PTS is used by default).
 -                      s4_nonvs prevents the kernel from saving/restoring the
 -                      ACPI NVS memory during hibernation.
 +                      nonvs prevents the kernel from saving/restoring the
 +                      ACPI NVS memory during suspend/hibernation and resume.
                        sci_force_enable causes the kernel to set SCI_EN directly
                        on resume from S1/S3 (which is against the ACPI spec,
                        but some broken systems don't work without it).
                        If there are multiple matching configurations changing
                        the same attribute, the last one is used.
  
 -      lmb=debug       [KNL] Enable lmb debug messages.
 +      memblock=debug  [KNL] Enable memblock debug messages.
  
        load_ramdisk=   [RAM] List of ramdisks to load from floppy
                        See Documentation/blockdev/ramdisk.txt.
                        [NETFILTER] Enable connection tracking flow accounting
                        0 to disable accounting
                        1 to enable accounting
-                       Default value depends on CONFIG_NF_CT_ACCT that is
-                       going to be removed in 2.6.29.
+                       Default value is 0.
  
        nfsaddrs=       [NFS]
                        See Documentation/filesystems/nfs/nfsroot.txt.
                        WARNING: Forcing ASPM on may cause system lockups.
  
        pcie_pme=       [PCIE,PM] Native PCIe PME signaling options:
 -              off     Do not use native PCIe PME signaling.
 +                      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.
                        If enabled at boot time, /selinux/disable can be used
                        later to disable prior to initial policy load.
  
 +      apparmor=       [APPARMOR] Disable or enable AppArmor at boot time
 +                      Format: { "0" | "1" }
 +                      See security/apparmor/Kconfig help text
 +                      0 -- disable.
 +                      1 -- enable.
 +                      Default value is set via kernel config option.
 +
        serialnumber    [BUGS=X86-32]
  
        shapers=        [NET]
diff --combined MAINTAINERS
index 33606bb91f1f77e27906475a7725c0f9df02e2ac,b04b97fe32175abedd065a7dbe8434026e3f6be8..7c3b67c34e52a4d5a98df91c60ca9183f6f11f4f
@@@ -313,11 -313,9 +313,9 @@@ S:        Maintaine
  F:    drivers/hwmon/adm1029.c
  
  ADM8211 WIRELESS DRIVER
- M:    Michael Wu <flamingice@sourmilk.net>
  L:    linux-wireless@vger.kernel.org
  W:    http://linuxwireless.org/
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
- S:    Maintained
+ S:    Orphan
  F:    drivers/net/wireless/adm8211.*
  
  ADT746X FAN DRIVER
@@@ -896,13 -894,11 +894,13 @@@ S:      Maintaine
  
  ARM/SAMSUNG ARM ARCHITECTURES
  M:    Ben Dooks <ben-linux@fluff.org>
 +M:    Kukjin Kim <kgene.kim@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  W:    http://www.fluff.org/ben/linux/
  S:    Maintained
 -F:    arch/arm/plat-s3c/
 +F:    arch/arm/plat-samsung/
  F:    arch/arm/plat-s3c24xx/
 +F:    arch/arm/plat-s5p/
  
  ARM/S3C2410 ARM ARCHITECTURE
  M:    Ben Dooks <ben-linux@fluff.org>
@@@ -1150,7 -1146,7 +1148,7 @@@ F:      drivers/mmc/host/atmel-mci.
  F:    drivers/mmc/host/atmel-mci-regs.h
  
  ATMEL AT91 / AT32 SERIAL DRIVER
 -M:    Haavard Skinnemoen <hskinnemoen@atmel.com>
 +M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  S:    Supported
  F:    drivers/serial/atmel_serial.c
  
@@@ -1162,18 -1158,18 +1160,18 @@@ F:   drivers/video/atmel_lcdfb.
  F:    include/video/atmel_lcdc.h
  
  ATMEL MACB ETHERNET DRIVER
 -M:    Haavard Skinnemoen <hskinnemoen@atmel.com>
 +M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  S:    Supported
  F:    drivers/net/macb.*
  
  ATMEL SPI DRIVER
 -M:    Haavard Skinnemoen <hskinnemoen@atmel.com>
 +M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  S:    Supported
  F:    drivers/spi/atmel_spi.*
  
  ATMEL USBA UDC DRIVER
 -M:    Haavard Skinnemoen <hskinnemoen@atmel.com>
 -L:    kernel@avr32linux.org
 +M:    Nicolas Ferre <nicolas.ferre@atmel.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  W:    http://avr32linux.org/twiki/bin/view/Main/AtmelUsbDeviceDriver
  S:    Supported
  F:    drivers/usb/gadget/atmel_usba_udc.*
@@@ -1369,7 -1365,7 +1367,7 @@@ BROADCOM BNX2X 10 GIGABIT ETHERNET DRIV
  M:    Eilon Greenstein <eilong@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
- F:    drivers/net/bnx2x*
+ F:    drivers/net/bnx2x/
  
  BROADCOM TG3 GIGABIT ETHERNET DRIVER
  M:    Matt Carlson <mcarlson@broadcom.com>
@@@ -1583,7 -1579,7 +1581,7 @@@ F:      include/linux/coda*.
  
  COMMON INTERNET FILE SYSTEM (CIFS)
  M:    Steve French <sfrench@samba.org>
 -L:    linux-cifs-client@lists.samba.org (moderated for non-subscribers)
 +L:    linux-cifs@vger.kernel.org
  L:    samba-technical@lists.samba.org (moderated for non-subscribers)
  W:    http://linux-cifs.samba.org/
  Q:    http://patchwork.ozlabs.org/project/linux-cifs-client/list/
@@@ -1733,7 -1729,7 +1731,7 @@@ S:      Maintaine
  F:    sound/pci/cs5535audio/
  
  CX18 VIDEO4LINUX DRIVER
 -M:    Andy Walls <awalls@radix.net>
 +M:    Andy Walls <awalls@md.metrocast.net>
  L:    ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
@@@ -1771,6 -1767,13 +1769,13 @@@ W:    http://www.openfabrics.or
  S:    Supported
  F:    drivers/infiniband/hw/cxgb4/
  
+ CXGB4VF ETHERNET DRIVER (CXGB4VF)
+ M:    Casey Leedom <leedom@chelsio.com>
+ L:    netdev@vger.kernel.org
+ W:    http://www.chelsio.com
+ S:    Supported
+ F:    drivers/net/cxgb4vf/
  CYBERPRO FB DRIVER
  M:    Russell King <linux@arm.linux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2111,20 -2114,11 +2116,20 @@@ F:   drivers/edac/i5000_edac.
  
  EDAC-I5400
  M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 -L:    bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
 +L:    linux-edac@vger.kernel.org
  W:    bluesmoke.sourceforge.net
  S:    Maintained
  F:    drivers/edac/i5400_edac.c
  
 +EDAC-I7CORE
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-edac@vger.kernel.org
 +W:    bluesmoke.sourceforge.net
 +S:    Maintained
 +F:    drivers/edac/i7core_edac.c
 +F:    drivers/edac/edac_mce.c
 +F:    include/linux/edac_mce.h
 +
  EDAC-I82975X
  M:    Ranganathan Desikan <ravi@jetztechnologies.com>
  M:    "Arvind R." <arvind@jetztechnologies.com>
@@@ -2898,13 -2892,6 +2903,13 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    drivers/input/
  
 +INPUT MULTITOUCH (MT) PROTOCOL
 +M:    Henrik Rydberg <rydberg@euromail.se>
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/input/multi-touch-protocol.txt
 +K:    \b(ABS|SYN)_MT_
 +
  INTEL IDLE DRIVER
  M:    Len Brown <lenb@kernel.org>
  L:    linux-pm@lists.linux-foundation.org
@@@ -3174,7 -3161,7 +3179,7 @@@ F:      Documentation/hwmon/it8
  F:    drivers/hwmon/it87.c
  
  IVTV VIDEO4LINUX DRIVER
 -M:    Andy Walls <awalls@radix.net>
 +M:    Andy Walls <awalls@md.metrocast.net>
  L:    ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
@@@ -3251,7 -3238,7 +3256,7 @@@ L:      autofs@linux.kernel.or
  S:    Maintained
  F:    fs/autofs4/
  
 -KERNEL BUILD
 +KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
  M:    Michal Marek <mmarek@suse.cz>
  T:    git git://repo.or.cz/linux-kbuild.git for-next
  T:    git git://repo.or.cz/linux-kbuild.git for-linus
@@@ -3260,9 -3247,6 +3265,9 @@@ S:      Maintaine
  F:    Documentation/kbuild/
  F:    Makefile
  F:    scripts/Makefile.*
 +F:    scripts/basic/
 +F:    scripts/mk*
 +F:    scripts/package/
  
  KERNEL JANITORS
  L:    kernel-janitors@vger.kernel.org
@@@ -3391,7 -3375,7 +3396,7 @@@ KPROBE
  M:    Ananth N Mavinakayanahalli <ananth@in.ibm.com>
  M:    Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
  M:    "David S. Miller" <davem@davemloft.net>
 -M:    Masami Hiramatsu <mhiramat@redhat.com>
 +M:    Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
  S:    Maintained
  F:    Documentation/kprobes.txt
  F:    include/linux/kprobes.h
@@@ -3512,8 -3496,9 +3517,8 @@@ F:      arch/powerpc/platforms/83xx
  
  LINUX FOR POWERPC PA SEMI PWRFICIENT
  M:    Olof Johansson <olof@lixom.net>
 -W:    http://www.pasemi.com/
  L:    linuxppc-dev@ozlabs.org
 -S:    Supported
 +S:    Maintained
  F:    arch/powerpc/platforms/pasemi/
  F:    drivers/*/*pasemi*
  F:    drivers/*/*/*pasemi*
@@@ -3686,7 -3671,7 +3691,7 @@@ F:      include/linux/mv643xx.
  MARVELL MWL8K WIRELESS DRIVER
  M:    Lennert Buytenhek <buytenh@wantstofly.org>
  L:    linux-wireless@vger.kernel.org
- S:    Maintained
+ S:    Odd Fixes
  F:    drivers/net/wireless/mwl8k.c
  
  MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER
@@@ -3915,17 -3900,19 +3920,19 @@@ L:   netem@lists.linux-foundation.or
  S:    Maintained
  F:    net/sched/sch_netem.c
  
- NETERION (S2IO) 10GbE DRIVER (xframe/vxge)
- M:    Ramkrishna Vepa <ram.vepa@neterion.com>
- M:    Rastapur Santosh <santosh.rastapur@neterion.com>
- M:    Sivakumar Subramani <sivakumar.subramani@neterion.com>
- M:    Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
+ NETERION 10GbE DRIVERS (s2io/vxge)
+ M:    Ramkrishna Vepa <ramkrishna.vepa@exar.com>
+ M:    Sivakumar Subramani <sivakumar.subramani@exar.com>
+ M:    Sreenivasa Honnur <sreenivasa.honnur@exar.com>
+ M:    Jon Mason <jon.mason@exar.com>
  L:    netdev@vger.kernel.org
  W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/Linux?Anonymous
  W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/X3100Linux?Anonymous
  S:    Supported
  F:    Documentation/networking/s2io.txt
  F:    drivers/net/s2io*
+ F:    Documentation/networking/vxge.txt
+ F:    drivers/net/vxge/
  
  NETFILTER/IPTABLES/IPCHAINS
  P:    Rusty Russell
@@@ -4224,7 -4211,6 +4231,7 @@@ OPEN FIRMWARE AND FLATTENED DEVICE TRE
  M:    Grant Likely <grant.likely@secretlab.ca>
  L:    devicetree-discuss@lists.ozlabs.org
  W:    http://fdt.secretlab.ca
 +T:    git git://git.secretlab.ca/git/linux-2.6.git
  S:    Maintained
  F:    drivers/of
  F:    include/linux/of*.h
@@@ -4272,10 -4258,9 +4279,9 @@@ F:     include/scsi/osd_
  F:    fs/exofs/
  
  P54 WIRELESS DRIVER
- M:    Michael Wu <flamingice@sourmilk.net>
+ M:    Christian Lamparter <chunkeey@googlemail.com>
  L:    linux-wireless@vger.kernel.org
- W:    http://prism54.org
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
+ W:    http://wireless.kernel.org/en/users/Drivers/p54
  S:    Maintained
  F:    drivers/net/wireless/p54/
  
@@@ -4537,7 -4522,7 +4543,7 @@@ PRISM54 WIRELESS DRIVE
  M:    "Luis R. Rodriguez" <mcgrof@gmail.com>
  L:    linux-wireless@vger.kernel.org
  W:    http://prism54.org
- S:    Maintained
+ S:    Obsolete
  F:    drivers/net/wireless/prism54/
  
  PROMISE DC4030 CACHING DISK CONTROLLER DRIVER
@@@ -4639,12 -4624,6 +4645,12 @@@ M:    Robert Jarzmik <robert.jarzmik@free.
  L:    rtc-linux@googlegroups.com
  S:    Maintained
  
 +QLOGIC QLA1280 SCSI DRIVER
 +M:    Michael Reed <mdr@sgi.com>
 +L:    linux-scsi@vger.kernel.org
 +S:    Maintained
 +F:    drivers/scsi/qla1280.[ch]
 +
  QLOGIC QLA2XXX FC-SCSI DRIVER
  M:    Andrew Vasquez <andrew.vasquez@qlogic.com>
  M:    linux-driver@qlogic.com
@@@ -4733,9 -4712,8 +4739,8 @@@ S:      Maintaine
  F:    drivers/rapidio/
  
  RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
- M:    Corey Thomas <coreythomas@charter.net>
  L:    linux-wireless@vger.kernel.org
- S:    Maintained
+ S:    Orphan
  F:    drivers/net/wireless/ray*
  
  RCUTORTURE MODULE
@@@ -5061,14 -5039,6 +5066,14 @@@ S:    Supporte
  F:    include/linux/selinux*
  F:    security/selinux/
  
 +APPARMOR SECURITY MODULE
 +M:    John Johansen <john.johansen@canonical.com>
 +L:    apparmor@lists.ubuntu.com (subscribers-only, general discussion)
 +W:    apparmor.wiki.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jj/apparmor-dev.git
 +S:    Supported
 +F:    security/apparmor/
 +
  SENSABLE PHANTOM
  M:    Jiri Slaby <jirislaby@gmail.com>
  S:    Maintained
@@@ -5344,7 -5314,6 +5349,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
  S:    Maintained
  F:    arch/sparc/
 +F:    drivers/sbus
  
  SPARC SERIAL DRIVERS
  M:    "David S. Miller" <davem@davemloft.net>
@@@ -5412,7 -5381,6 +5417,7 @@@ M:      David Brownell <dbrownell@users.sour
  M:    Grant Likely <grant.likely@secretlab.ca>
  L:    spi-devel-general@lists.sourceforge.net
  Q:    http://patchwork.kernel.org/project/spi-devel-general/list/
 +T:    git git://git.secretlab.ca/git/linux-2.6.git
  S:    Maintained
  F:    Documentation/spi/
  F:    drivers/spi/
@@@ -5613,7 -5581,7 +5618,7 @@@ L:      tomoyo-users-en@lists.sourceforge.j
  L:    tomoyo-dev@lists.sourceforge.jp (subscribers-only, for developers in Japanese)
  L:    tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese)
  W:    http://tomoyo.sourceforge.jp/
 -T:    quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.2.x/tomoyo-lsm/patches/
 +T:    quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.3.x/tomoyo-lsm/patches/
  S:    Maintained
  F:    security/tomoyo/
  
@@@ -6068,10 -6036,9 +6073,9 @@@ F:     Documentation/video4linux/zc0301.tx
  F:    drivers/media/video/zc0301/
  
  USB ZD1201 DRIVER
- M:    Jeroen Vreeken <pe1rxq@amsat.org>
- L:    linux-usb@vger.kernel.org
+ L:    linux-wireless@vger.kernel.org
  W:    http://linux-lc100020.sourceforge.net
- S:    Maintained
+ S:    Orphan
  F:    drivers/net/wireless/zd1201.*
  
  USB ZR364XX DRIVER
@@@ -6251,22 -6218,12 +6255,14 @@@ F:   drivers/mmc/host/wbsd.
  
  WATCHDOG DEVICE DRIVERS
  M:    Wim Van Sebroeck <wim@iguana.be>
 +L:    linux-watchdog@vger.kernel.org
 +W:    http://www.linux-watchdog.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog.git
  S:    Maintained
  F:    Documentation/watchdog/
  F:    drivers/watchdog/
  F:    include/linux/watchdog.h
  
- WAVELAN NETWORK DRIVER & WIRELESS EXTENSIONS
- M:    Jean Tourrilhes <jt@hpl.hp.com>
- L:    linux-wireless@vger.kernel.org
- W:    http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
- S:    Maintained
- F:    Documentation/networking/wavelan.txt
- F:    drivers/staging/wavelan/
  WD7000 SCSI DRIVER
  M:    Miroslav Zagorac <zaga@fly.cc.fer.hr>
  L:    linux-scsi@vger.kernel.org
index e7f4d33c55edbb80b8ec52d9793a45d3c8854519,1db9bd2281d7bf2fb45a4aae625aedcc8ab9aaff..33ecc3ea8782add8f88e68405d227ee4af700134
@@@ -451,10 -451,17 +451,17 @@@ void stop_this_cpu(void *dummy)
   *
   * (Could use an alternative three way for this if there was one.)
   */
 -static inline void rdtsc_barrier(void)
 +static __always_inline void rdtsc_barrier(void)
  {
        alternative(ASM_NOP3, "mfence", X86_FEATURE_MFENCE_RDTSC);
        alternative(ASM_NOP3, "lfence", X86_FEATURE_LFENCE_RDTSC);
  }
  
+ /*
+  * We handle most unaligned accesses in hardware.  On the other hand
+  * unaligned DMA can be quite expensive on some Nehalem processors.
+  *
+  * Based on this we disable the IP header alignment in network drivers.
+  */
+ #define NET_IP_ALIGN  0
  #endif /* _ASM_X86_SYSTEM_H */
diff --combined drivers/base/core.c
index 9b9d3bd54e3a5359f8f0aa3e833ab5380ea11a47,38bbbd0293067aa5f35d7c5881bb7079c1d38db7..f8e72724dd4b78c0d7048f552a5be29bb189956b
@@@ -673,7 -673,7 +673,7 @@@ static struct kobject *get_device_paren
                 */
                if (parent == NULL)
                        parent_kobj = virtual_device_parent(dev);
 -              else if (parent->class)
 +              else if (parent->class && !dev->class->ns_type)
                        return &parent->kobj;
                else
                        parent_kobj = &parent->kobj;
@@@ -1819,3 -1819,67 +1819,67 @@@ void device_shutdown(void
        spin_unlock(&devices_kset->list_lock);
        async_synchronize_full();
  }
+ /*
+  * Device logging functions
+  */
+ #ifdef CONFIG_PRINTK
+ static int __dev_printk(const char *level, const struct device *dev,
+                       struct va_format *vaf)
+ {
+       if (!dev)
+               return printk("%s(NULL device *): %pV", level, vaf);
+       return printk("%s%s %s: %pV",
+                     level, dev_driver_string(dev), dev_name(dev), vaf);
+ }
+ int dev_printk(const char *level, const struct device *dev,
+              const char *fmt, ...)
+ {
+       struct va_format vaf;
+       va_list args;
+       int r;
+       va_start(args, fmt);
+       vaf.fmt = fmt;
+       vaf.va = &args;
+       r = __dev_printk(level, dev, &vaf);
+       va_end(args);
+       return r;
+ }
+ EXPORT_SYMBOL(dev_printk);
+ #define define_dev_printk_level(func, kern_level)             \
+ int func(const struct device *dev, const char *fmt, ...)      \
+ {                                                             \
+       struct va_format vaf;                                   \
+       va_list args;                                           \
+       int r;                                                  \
+                                                               \
+       va_start(args, fmt);                                    \
+                                                               \
+       vaf.fmt = fmt;                                          \
+       vaf.va = &args;                                         \
+                                                               \
+       r = __dev_printk(kern_level, dev, &vaf);                \
+       va_end(args);                                           \
+                                                               \
+       return r;                                               \
+ }                                                             \
+ EXPORT_SYMBOL(func);
+ define_dev_printk_level(dev_emerg, KERN_EMERG);
+ define_dev_printk_level(dev_alert, KERN_ALERT);
+ define_dev_printk_level(dev_crit, KERN_CRIT);
+ define_dev_printk_level(dev_err, KERN_ERR);
+ define_dev_printk_level(dev_warn, KERN_WARNING);
+ define_dev_printk_level(dev_notice, KERN_NOTICE);
+ define_dev_printk_level(_dev_info, KERN_INFO);
+ #endif
index 855ee44fdb52de5a23b847a313616b63120a8b9d,8b693c8c25e2971d0dd663a1c1755da7494d752a..8c9b483a0d93064dc7ae7dc55ea511fcd98c1532
@@@ -969,8 -969,7 +969,8 @@@ static void process_mpa_reply(struct c4
                goto err;
        goto out;
  err:
 -      abort_connection(ep, skb, GFP_KERNEL);
 +      state_set(&ep->com, ABORTING);
 +      send_abort(ep, skb, GFP_KERNEL);
  out:
        connect_reply_upcall(ep, err);
        return;
@@@ -1365,7 -1364,7 +1365,7 @@@ static int pass_accept_req(struct c4iw_
                       __func__);
                goto reject;
        }
-       dst = &rt->u.dst;
+       dst = &rt->dst;
        if (dst->neighbour->dev->flags & IFF_LOOPBACK) {
                pdev = ip_dev_find(&init_net, peer_ip);
                BUG_ON(!pdev);
                                    pdev, 0);
                mtu = pdev->mtu;
                tx_chan = cxgb4_port_chan(pdev);
 -              smac_idx = tx_chan << 1;
 +              smac_idx = (cxgb4_port_viid(pdev) & 0x7F) << 1;
                step = dev->rdev.lldi.ntxq / dev->rdev.lldi.nchan;
                txq_idx = cxgb4_port_idx(pdev) * step;
                step = dev->rdev.lldi.nrxq / dev->rdev.lldi.nchan;
                                        dst->neighbour->dev, 0);
                mtu = dst_mtu(dst);
                tx_chan = cxgb4_port_chan(dst->neighbour->dev);
 -              smac_idx = tx_chan << 1;
 +              smac_idx = (cxgb4_port_viid(dst->neighbour->dev) & 0x7F) << 1;
                step = dev->rdev.lldi.ntxq / dev->rdev.lldi.nchan;
                txq_idx = cxgb4_port_idx(dst->neighbour->dev) * step;
                step = dev->rdev.lldi.nrxq / dev->rdev.lldi.nchan;
@@@ -1939,7 -1938,7 +1939,7 @@@ int c4iw_connect(struct iw_cm_id *cm_id
                err = -EHOSTUNREACH;
                goto fail3;
        }
-       ep->dst = &rt->u.dst;
+       ep->dst = &rt->dst;
  
        /* get a l2t entry */
        if (ep->dst->neighbour->dev->flags & IFF_LOOPBACK) {
                                        pdev, 0);
                ep->mtu = pdev->mtu;
                ep->tx_chan = cxgb4_port_chan(pdev);
 -              ep->smac_idx = ep->tx_chan << 1;
 +              ep->smac_idx = (cxgb4_port_viid(pdev) & 0x7F) << 1;
                step = ep->com.dev->rdev.lldi.ntxq /
                       ep->com.dev->rdev.lldi.nchan;
                ep->txq_idx = cxgb4_port_idx(pdev) * step;
                                        ep->dst->neighbour->dev, 0);
                ep->mtu = dst_mtu(ep->dst);
                ep->tx_chan = cxgb4_port_chan(ep->dst->neighbour->dev);
 -              ep->smac_idx = ep->tx_chan << 1;
 +              ep->smac_idx = (cxgb4_port_viid(ep->dst->neighbour->dev) &
 +                              0x7F) << 1;
                step = ep->com.dev->rdev.lldi.ntxq /
                       ep->com.dev->rdev.lldi.nchan;
                ep->txq_idx = cxgb4_port_idx(ep->dst->neighbour->dev) * step;
index 9f13b660b8018a04e8c2c30e0b971e255f86e4a3,9e9164a9d4893e4bc320287b1946ec1547518d0e..36d31a41632050f7e75d8f79a4ad16e79a02e59c
@@@ -1,7 -1,7 +1,7 @@@
  /*******************************************************************************
  
    Intel PRO/1000 Linux driver
-   Copyright(c) 1999 - 2009 Intel Corporation.
+   Copyright(c) 1999 - 2010 Intel Corporation.
  
    This program is free software; you can redistribute it and/or modify it
    under the terms and conditions of the GNU General Public License,
@@@ -52,7 -52,9 +52,9 @@@
  
  #include "e1000.h"
  
- #define DRV_VERSION "1.0.2-k4"
+ #define DRV_EXTRAVERSION "-k2"
+ #define DRV_VERSION "1.2.7" DRV_EXTRAVERSION
  char e1000e_driver_name[] = "e1000e";
  const char e1000e_driver_version[] = DRV_VERSION;
  
@@@ -67,6 -69,7 +69,7 @@@ static const struct e1000_info *e1000_i
        [board_ich9lan]         = &e1000_ich9_info,
        [board_ich10lan]        = &e1000_ich10_info,
        [board_pchlan]          = &e1000_pch_info,
+       [board_pch2lan]         = &e1000_pch2_info,
  };
  
  struct e1000_reg_info {
@@@ -221,10 -224,10 +224,10 @@@ static void e1000e_dump(struct e1000_ad
        buffer_info = &tx_ring->buffer_info[tx_ring->next_to_clean];
        printk(KERN_INFO " %5d %5X %5X %016llX %04X %3X %016llX\n",
                0, tx_ring->next_to_use, tx_ring->next_to_clean,
-               (u64)buffer_info->dma,
+               (unsigned long long)buffer_info->dma,
                buffer_info->length,
                buffer_info->next_to_watch,
-               (u64)buffer_info->time_stamp);
+               (unsigned long long)buffer_info->time_stamp);
  
        /* Print TX Rings */
        if (!netif_msg_tx_done(adapter))
                        "%04X  %3X %016llX %p",
                       (!(le64_to_cpu(u0->b) & (1<<29)) ? 'l' :
                        ((le64_to_cpu(u0->b) & (1<<20)) ? 'd' : 'c')), i,
-                      le64_to_cpu(u0->a), le64_to_cpu(u0->b),
-                      (u64)buffer_info->dma, buffer_info->length,
-                      buffer_info->next_to_watch, (u64)buffer_info->time_stamp,
+                      (unsigned long long)le64_to_cpu(u0->a),
+                      (unsigned long long)le64_to_cpu(u0->b),
+                      (unsigned long long)buffer_info->dma,
+                      buffer_info->length, buffer_info->next_to_watch,
+                      (unsigned long long)buffer_info->time_stamp,
                       buffer_info->skb);
                if (i == tx_ring->next_to_use && i == tx_ring->next_to_clean)
                        printk(KERN_CONT " NTC/U\n");
@@@ -353,19 -358,19 +358,19 @@@ rx_ring_summary
                                printk(KERN_INFO "RWB[0x%03X]     %016llX "
                                        "%016llX %016llX %016llX "
                                        "---------------- %p", i,
-                                       le64_to_cpu(u1->a),
-                                       le64_to_cpu(u1->b),
-                                       le64_to_cpu(u1->c),
-                                       le64_to_cpu(u1->d),
+                                       (unsigned long long)le64_to_cpu(u1->a),
+                                       (unsigned long long)le64_to_cpu(u1->b),
+                                       (unsigned long long)le64_to_cpu(u1->c),
+                                       (unsigned long long)le64_to_cpu(u1->d),
                                        buffer_info->skb);
                        } else {
                                printk(KERN_INFO "R  [0x%03X]     %016llX "
                                        "%016llX %016llX %016llX %016llX %p", i,
-                                       le64_to_cpu(u1->a),
-                                       le64_to_cpu(u1->b),
-                                       le64_to_cpu(u1->c),
-                                       le64_to_cpu(u1->d),
-                                       (u64)buffer_info->dma,
+                                       (unsigned long long)le64_to_cpu(u1->a),
+                                       (unsigned long long)le64_to_cpu(u1->b),
+                                       (unsigned long long)le64_to_cpu(u1->c),
+                                       (unsigned long long)le64_to_cpu(u1->d),
+                                       (unsigned long long)buffer_info->dma,
                                        buffer_info->skb);
  
                                if (netif_msg_pktdata(adapter))
                        buffer_info = &rx_ring->buffer_info[i];
                        u0 = (struct my_u0 *)rx_desc;
                        printk(KERN_INFO "Rl[0x%03X]    %016llX %016llX "
-                               "%016llX %p",
-                               i, le64_to_cpu(u0->a), le64_to_cpu(u0->b),
-                               (u64)buffer_info->dma, buffer_info->skb);
+                               "%016llX %p", i,
+                               (unsigned long long)le64_to_cpu(u0->a),
+                               (unsigned long long)le64_to_cpu(u0->b),
+                               (unsigned long long)buffer_info->dma,
+                               buffer_info->skb);
                        if (i == rx_ring->next_to_use)
                                printk(KERN_CONT " NTU\n");
                        else if (i == rx_ring->next_to_clean)
@@@ -1778,25 -1785,25 +1785,25 @@@ void e1000e_reset_interrupt_capability(
  void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)
  {
        int err;
-       int numvecs, i;
+       int i;
  
        switch (adapter->int_mode) {
        case E1000E_INT_MODE_MSIX:
                if (adapter->flags & FLAG_HAS_MSIX) {
-                       numvecs = 3; /* RxQ0, TxQ0 and other */
-                       adapter->msix_entries = kcalloc(numvecs,
+                       adapter->num_vectors = 3; /* RxQ0, TxQ0 and other */
+                       adapter->msix_entries = kcalloc(adapter->num_vectors,
                                                      sizeof(struct msix_entry),
                                                      GFP_KERNEL);
                        if (adapter->msix_entries) {
-                               for (i = 0; i < numvecs; i++)
+                               for (i = 0; i < adapter->num_vectors; i++)
                                        adapter->msix_entries[i].entry = i;
  
                                err = pci_enable_msix(adapter->pdev,
                                                      adapter->msix_entries,
-                                                     numvecs);
-                               if (err == 0)
+                                                     adapter->num_vectors);
+                               if (err == 0) {
                                        return;
+                               }
                        }
                        /* MSI-X failed, so fall through and try MSI */
                        e_err("Failed to initialize MSI-X interrupts.  "
                /* Don't do anything; this is the system default */
                break;
        }
+       /* store the number of vectors being used */
+       adapter->num_vectors = 1;
  }
  
  /**
@@@ -1939,7 -1949,14 +1949,14 @@@ static void e1000_irq_disable(struct e1
        if (adapter->msix_entries)
                ew32(EIAC_82574, 0);
        e1e_flush();
-       synchronize_irq(adapter->pdev->irq);
+       if (adapter->msix_entries) {
+               int i;
+               for (i = 0; i < adapter->num_vectors; i++)
+                       synchronize_irq(adapter->msix_entries[i].vector);
+       } else {
+               synchronize_irq(adapter->pdev->irq);
+       }
  }
  
  /**
@@@ -2723,6 -2740,16 +2740,16 @@@ static void e1000_setup_rctl(struct e10
                e1e_wphy(hw, 22, phy_data);
        }
  
+       /* Workaround Si errata on 82579 - configure jumbo frame flow */
+       if (hw->mac.type == e1000_pch2lan) {
+               s32 ret_val;
+               if (rctl & E1000_RCTL_LPE)
+                       ret_val = e1000_lv_jumbo_workaround_ich8lan(hw, true);
+               else
+                       ret_val = e1000_lv_jumbo_workaround_ich8lan(hw, false);
+       }
        /* Setup buffer sizes */
        rctl &= ~E1000_RCTL_SZ_4096;
        rctl |= E1000_RCTL_BSEX;
         * per packet.
         */
        pages = PAGE_USE_COUNT(adapter->netdev->mtu);
-       if (!(adapter->flags & FLAG_IS_ICH) && (pages <= 3) &&
+       if (!(adapter->flags & FLAG_HAS_ERT) && (pages <= 3) &&
            (PAGE_SIZE <= 16384) && (rctl & E1000_RCTL_LPE))
                adapter->rx_ps_pages = pages;
        else
@@@ -2901,10 -2928,10 +2928,10 @@@ static void e1000_configure_rx(struct e
                         * dropped transactions.
                         */
                        pm_qos_update_request(
 -                              adapter->netdev->pm_qos_req, 55);
 +                              &adapter->netdev->pm_qos_req, 55);
                } else {
                        pm_qos_update_request(
 -                              adapter->netdev->pm_qos_req,
 +                              &adapter->netdev->pm_qos_req,
                                PM_QOS_DEFAULT_VALUE);
                }
        }
@@@ -3118,7 -3145,27 +3145,27 @@@ void e1000e_reset(struct e1000_adapter 
         *   with ERT support assuming ERT set to E1000_ERT_2048), or
         * - the full Rx FIFO size minus one full frame
         */
-       if (hw->mac.type == e1000_pchlan) {
+       if (adapter->flags & FLAG_DISABLE_FC_PAUSE_TIME)
+               fc->pause_time = 0xFFFF;
+       else
+               fc->pause_time = E1000_FC_PAUSE_TIME;
+       fc->send_xon = 1;
+       fc->current_mode = fc->requested_mode;
+       switch (hw->mac.type) {
+       default:
+               if ((adapter->flags & FLAG_HAS_ERT) &&
+                   (adapter->netdev->mtu > ETH_DATA_LEN))
+                       hwm = min(((pba << 10) * 9 / 10),
+                                 ((pba << 10) - (E1000_ERT_2048 << 3)));
+               else
+                       hwm = min(((pba << 10) * 9 / 10),
+                                 ((pba << 10) - adapter->max_frame_size));
+               fc->high_water = hwm & E1000_FCRTH_RTH; /* 8-byte granularity */
+               fc->low_water = fc->high_water - 8;
+               break;
+       case e1000_pchlan:
                /*
                 * Workaround PCH LOM adapter hangs with certain network
                 * loads.  If hangs persist, try disabling Tx flow control.
                        fc->low_water  = 0x3000;
                }
                fc->refresh_time = 0x1000;
-       } else {
-               if ((adapter->flags & FLAG_HAS_ERT) &&
-                   (adapter->netdev->mtu > ETH_DATA_LEN))
-                       hwm = min(((pba << 10) * 9 / 10),
-                                 ((pba << 10) - (E1000_ERT_2048 << 3)));
-               else
-                       hwm = min(((pba << 10) * 9 / 10),
-                                 ((pba << 10) - adapter->max_frame_size));
-               fc->high_water = hwm & E1000_FCRTH_RTH; /* 8-byte granularity */
-               fc->low_water = fc->high_water - 8;
+               break;
+       case e1000_pch2lan:
+               fc->high_water = 0x05C20;
+               fc->low_water = 0x05048;
+               fc->pause_time = 0x0650;
+               fc->refresh_time = 0x0400;
+               break;
        }
  
-       if (adapter->flags & FLAG_DISABLE_FC_PAUSE_TIME)
-               fc->pause_time = 0xFFFF;
-       else
-               fc->pause_time = E1000_FC_PAUSE_TIME;
-       fc->send_xon = 1;
-       fc->current_mode = fc->requested_mode;
        /* Allow time for pending master requests to run */
        mac->ops.reset_hw(hw);
  
                e1000_get_hw_control(adapter);
  
        ew32(WUC, 0);
-       if (adapter->flags2 & FLAG2_HAS_PHY_WAKEUP)
-               e1e_wphy(&adapter->hw, BM_WUC, 0);
  
        if (mac->ops.init_hw(hw))
                e_err("Hardware Error\n");
@@@ -3194,12 -3228,6 +3228,6 @@@ int e1000e_up(struct e1000_adapter *ada
  {
        struct e1000_hw *hw = &adapter->hw;
  
-       /* DMA latency requirement to workaround early-receive/jumbo issue */
-       if (adapter->flags & FLAG_HAS_ERT)
-               pm_qos_add_request(&adapter->netdev->pm_qos_req,
-                                  PM_QOS_CPU_DMA_LATENCY,
-                                  PM_QOS_DEFAULT_VALUE);
        /* hardware has been reset, we need to reload some things */
        e1000_configure(adapter);
  
@@@ -3263,9 -3291,6 +3291,6 @@@ void e1000e_down(struct e1000_adapter *
        e1000_clean_tx_ring(adapter);
        e1000_clean_rx_ring(adapter);
  
-       if (adapter->flags & FLAG_HAS_ERT)
-               pm_qos_remove_request(&adapter->netdev->pm_qos_req);
        /*
         * TODO: for power management, we could drop the link and
         * pci_disable_device here.
@@@ -3416,13 -3441,18 +3441,18 @@@ static int e1000_test_msi(struct e1000_
  
        /* disable SERR in case the MSI write causes a master abort */
        pci_read_config_word(adapter->pdev, PCI_COMMAND, &pci_cmd);
-       pci_write_config_word(adapter->pdev, PCI_COMMAND,
-                             pci_cmd & ~PCI_COMMAND_SERR);
+       if (pci_cmd & PCI_COMMAND_SERR)
+               pci_write_config_word(adapter->pdev, PCI_COMMAND,
+                                     pci_cmd & ~PCI_COMMAND_SERR);
  
        err = e1000_test_msi_interrupt(adapter);
  
-       /* restore previous setting of command word */
-       pci_write_config_word(adapter->pdev, PCI_COMMAND, pci_cmd);
+       /* re-enable SERR */
+       if (pci_cmd & PCI_COMMAND_SERR) {
+               pci_read_config_word(adapter->pdev, PCI_COMMAND, &pci_cmd);
+               pci_cmd |= PCI_COMMAND_SERR;
+               pci_write_config_word(adapter->pdev, PCI_COMMAND, pci_cmd);
+       }
  
        /* success ! */
        if (!err)
@@@ -3495,6 -3525,12 +3525,12 @@@ static int e1000_open(struct net_devic
             E1000_MNG_DHCP_COOKIE_STATUS_VLAN))
                e1000_update_mng_vlan(adapter);
  
 -              adapter->netdev->pm_qos_req =
 -                                  pm_qos_add_request(PM_QOS_CPU_DMA_LATENCY,
 -                                                     PM_QOS_DEFAULT_VALUE);
+       /* DMA latency requirement to workaround early-receive/jumbo issue */
+       if (adapter->flags & FLAG_HAS_ERT)
++              pm_qos_add_request(&adapter->netdev->pm_qos_req,
++                                 PM_QOS_CPU_DMA_LATENCY,
++                                 PM_QOS_DEFAULT_VALUE);
        /*
         * before we allocate an interrupt, we must be ready to handle it.
         * Setting DEBUG_SHIRQ in the kernel makes it fire an interrupt
@@@ -3599,6 -3635,11 +3635,9 @@@ static int e1000_close(struct net_devic
        if (adapter->flags & FLAG_HAS_AMT)
                e1000_release_hw_control(adapter);
  
 -      if (adapter->flags & FLAG_HAS_ERT) {
 -              pm_qos_remove_request(adapter->netdev->pm_qos_req);
 -              adapter->netdev->pm_qos_req = NULL;
 -      }
++      if (adapter->flags & FLAG_HAS_ERT)
++              pm_qos_remove_request(&adapter->netdev->pm_qos_req);
        pm_runtime_put_sync(&pdev->dev);
  
        return 0;
@@@ -3668,6 -3709,110 +3707,110 @@@ static void e1000_update_phy_info(unsig
        schedule_work(&adapter->update_phy_task);
  }
  
+ /**
+  * e1000e_update_phy_stats - Update the PHY statistics counters
+  * @adapter: board private structure
+  **/
+ static void e1000e_update_phy_stats(struct e1000_adapter *adapter)
+ {
+       struct e1000_hw *hw = &adapter->hw;
+       s32 ret_val;
+       u16 phy_data;
+       ret_val = hw->phy.ops.acquire(hw);
+       if (ret_val)
+               return;
+       hw->phy.addr = 1;
+ #define HV_PHY_STATS_PAGE     778
+       /*
+        * A page set is expensive so check if already on desired page.
+        * If not, set to the page with the PHY status registers.
+        */
+       ret_val = e1000e_read_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
+                                          &phy_data);
+       if (ret_val)
+               goto release;
+       if (phy_data != (HV_PHY_STATS_PAGE << IGP_PAGE_SHIFT)) {
+               ret_val = e1000e_write_phy_reg_mdic(hw,
+                                                   IGP01E1000_PHY_PAGE_SELECT,
+                                                   (HV_PHY_STATS_PAGE <<
+                                                    IGP_PAGE_SHIFT));
+               if (ret_val)
+                       goto release;
+       }
+       /* Read/clear the upper 16-bit registers and read/accumulate lower */
+       /* Single Collision Count */
+       e1000e_read_phy_reg_mdic(hw, HV_SCC_UPPER & MAX_PHY_REG_ADDRESS,
+                                &phy_data);
+       ret_val = e1000e_read_phy_reg_mdic(hw,
+                                          HV_SCC_LOWER & MAX_PHY_REG_ADDRESS,
+                                          &phy_data);
+       if (!ret_val)
+               adapter->stats.scc += phy_data;
+       /* Excessive Collision Count */
+       e1000e_read_phy_reg_mdic(hw, HV_ECOL_UPPER & MAX_PHY_REG_ADDRESS,
+                                &phy_data);
+       ret_val = e1000e_read_phy_reg_mdic(hw,
+                                          HV_ECOL_LOWER & MAX_PHY_REG_ADDRESS,
+                                          &phy_data);
+       if (!ret_val)
+               adapter->stats.ecol += phy_data;
+       /* Multiple Collision Count */
+       e1000e_read_phy_reg_mdic(hw, HV_MCC_UPPER & MAX_PHY_REG_ADDRESS,
+                                &phy_data);
+       ret_val = e1000e_read_phy_reg_mdic(hw,
+                                          HV_MCC_LOWER & MAX_PHY_REG_ADDRESS,
+                                          &phy_data);
+       if (!ret_val)
+               adapter->stats.mcc += phy_data;
+       /* Late Collision Count */
+       e1000e_read_phy_reg_mdic(hw, HV_LATECOL_UPPER & MAX_PHY_REG_ADDRESS,
+                                &phy_data);
+       ret_val = e1000e_read_phy_reg_mdic(hw,
+                                          HV_LATECOL_LOWER &
+                                          MAX_PHY_REG_ADDRESS,
+                                          &phy_data);
+       if (!ret_val)
+               adapter->stats.latecol += phy_data;
+       /* Collision Count - also used for adaptive IFS */
+       e1000e_read_phy_reg_mdic(hw, HV_COLC_UPPER & MAX_PHY_REG_ADDRESS,
+                                &phy_data);
+       ret_val = e1000e_read_phy_reg_mdic(hw,
+                                          HV_COLC_LOWER & MAX_PHY_REG_ADDRESS,
+                                          &phy_data);
+       if (!ret_val)
+               hw->mac.collision_delta = phy_data;
+       /* Defer Count */
+       e1000e_read_phy_reg_mdic(hw, HV_DC_UPPER & MAX_PHY_REG_ADDRESS,
+                                &phy_data);
+       ret_val = e1000e_read_phy_reg_mdic(hw,
+                                          HV_DC_LOWER & MAX_PHY_REG_ADDRESS,
+                                          &phy_data);
+       if (!ret_val)
+               adapter->stats.dc += phy_data;
+       /* Transmit with no CRS */
+       e1000e_read_phy_reg_mdic(hw, HV_TNCRS_UPPER & MAX_PHY_REG_ADDRESS,
+                                &phy_data);
+       ret_val = e1000e_read_phy_reg_mdic(hw,
+                                          HV_TNCRS_LOWER & MAX_PHY_REG_ADDRESS,
+                                          &phy_data);
+       if (!ret_val)
+               adapter->stats.tncrs += phy_data;
+ release:
+       hw->phy.ops.release(hw);
+ }
  /**
   * e1000e_update_stats - Update the board statistics counters
   * @adapter: board private structure
@@@ -3677,7 -3822,6 +3820,6 @@@ void e1000e_update_stats(struct e1000_a
        struct net_device *netdev = adapter->netdev;
        struct e1000_hw *hw = &adapter->hw;
        struct pci_dev *pdev = adapter->pdev;
-       u16 phy_data;
  
        /*
         * Prevent stats update while adapter is being reset, or if the pci
        adapter->stats.roc += er32(ROC);
  
        adapter->stats.mpc += er32(MPC);
-       if ((hw->phy.type == e1000_phy_82578) ||
-           (hw->phy.type == e1000_phy_82577)) {
-               e1e_rphy(hw, HV_SCC_UPPER, &phy_data);
-               if (!e1e_rphy(hw, HV_SCC_LOWER, &phy_data))
-                       adapter->stats.scc += phy_data;
-               e1e_rphy(hw, HV_ECOL_UPPER, &phy_data);
-               if (!e1e_rphy(hw, HV_ECOL_LOWER, &phy_data))
-                       adapter->stats.ecol += phy_data;
-               e1e_rphy(hw, HV_MCC_UPPER, &phy_data);
-               if (!e1e_rphy(hw, HV_MCC_LOWER, &phy_data))
-                       adapter->stats.mcc += phy_data;
-               e1e_rphy(hw, HV_LATECOL_UPPER, &phy_data);
-               if (!e1e_rphy(hw, HV_LATECOL_LOWER, &phy_data))
-                       adapter->stats.latecol += phy_data;
-               e1e_rphy(hw, HV_DC_UPPER, &phy_data);
-               if (!e1e_rphy(hw, HV_DC_LOWER, &phy_data))
-                       adapter->stats.dc += phy_data;
-       } else {
-               adapter->stats.scc += er32(SCC);
-               adapter->stats.ecol += er32(ECOL);
-               adapter->stats.mcc += er32(MCC);
-               adapter->stats.latecol += er32(LATECOL);
-               adapter->stats.dc += er32(DC);
+       /* Half-duplex statistics */
+       if (adapter->link_duplex == HALF_DUPLEX) {
+               if (adapter->flags2 & FLAG2_HAS_PHY_STATS) {
+                       e1000e_update_phy_stats(adapter);
+               } else {
+                       adapter->stats.scc += er32(SCC);
+                       adapter->stats.ecol += er32(ECOL);
+                       adapter->stats.mcc += er32(MCC);
+                       adapter->stats.latecol += er32(LATECOL);
+                       adapter->stats.dc += er32(DC);
+                       hw->mac.collision_delta = er32(COLC);
+                       if ((hw->mac.type != e1000_82574) &&
+                           (hw->mac.type != e1000_82583))
+                               adapter->stats.tncrs += er32(TNCRS);
+               }
+               adapter->stats.colc += hw->mac.collision_delta;
        }
        adapter->stats.xonrxc += er32(XONRXC);
        adapter->stats.xontxc += er32(XONTXC);
        adapter->stats.xoffrxc += er32(XOFFRXC);
  
        hw->mac.tx_packet_delta = er32(TPT);
        adapter->stats.tpt += hw->mac.tx_packet_delta;
-       if ((hw->phy.type == e1000_phy_82578) ||
-           (hw->phy.type == e1000_phy_82577)) {
-               e1e_rphy(hw, HV_COLC_UPPER, &phy_data);
-               if (!e1e_rphy(hw, HV_COLC_LOWER, &phy_data))
-                       hw->mac.collision_delta = phy_data;
-       } else {
-               hw->mac.collision_delta = er32(COLC);
-       }
-       adapter->stats.colc += hw->mac.collision_delta;
  
        adapter->stats.algnerrc += er32(ALGNERRC);
        adapter->stats.rxerrc += er32(RXERRC);
-       if ((hw->phy.type == e1000_phy_82578) ||
-           (hw->phy.type == e1000_phy_82577)) {
-               e1e_rphy(hw, HV_TNCRS_UPPER, &phy_data);
-               if (!e1e_rphy(hw, HV_TNCRS_LOWER, &phy_data))
-                       adapter->stats.tncrs += phy_data;
-       } else {
-               if ((hw->mac.type != e1000_82574) &&
-                   (hw->mac.type != e1000_82583))
-                       adapter->stats.tncrs += er32(TNCRS);
-       }
        adapter->stats.cexterr += er32(CEXTERR);
        adapter->stats.tsctc += er32(TSCTC);
        adapter->stats.tsctfc += er32(TSCTFC);
@@@ -3862,7 -3980,7 +3978,7 @@@ static void e1000_print_link_info(struc
               ((ctrl & E1000_CTRL_TFCE) ? "TX" : "None" )));
  }
  
- bool e1000e_has_link(struct e1000_adapter *adapter)
static bool e1000e_has_link(struct e1000_adapter *adapter)
  {
        struct e1000_hw *hw = &adapter->hw;
        bool link_active = 0;
@@@ -4838,14 -4956,7 +4954,7 @@@ static int e1000_init_phy_wakeup(struc
        int retval = 0;
  
        /* copy MAC RARs to PHY RARs */
-       for (i = 0; i < adapter->hw.mac.rar_entry_count; i++) {
-               mac_reg = er32(RAL(i));
-               e1e_wphy(hw, BM_RAR_L(i), (u16)(mac_reg & 0xFFFF));
-               e1e_wphy(hw, BM_RAR_M(i), (u16)((mac_reg >> 16) & 0xFFFF));
-               mac_reg = er32(RAH(i));
-               e1e_wphy(hw, BM_RAR_H(i), (u16)(mac_reg & 0xFFFF));
-               e1e_wphy(hw, BM_RAR_CTRL(i), (u16)((mac_reg >> 16) & 0xFFFF));
-       }
+       e1000_copy_rx_addrs_to_phy_ich8lan(hw);
  
        /* copy MAC MTA to PHY MTA */
        for (i = 0; i < adapter->hw.mac.mta_reg_count; i++) {
@@@ -5548,8 -5659,6 +5657,6 @@@ static int __devinit e1000_probe(struc
        if (err)
                goto err_sw_init;
  
-       err = -EIO;
        memcpy(&hw->mac.ops, ei->mac_ops, sizeof(hw->mac.ops));
        memcpy(&hw->nvm.ops, ei->nvm_ops, sizeof(hw->nvm.ops));
        memcpy(&hw->phy.ops, ei->phy_ops, sizeof(hw->phy.ops));
@@@ -5896,6 -6005,9 +6003,9 @@@ static DEFINE_PCI_DEVICE_TABLE(e1000_pc
        { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_D_HV_DM), board_pchlan },
        { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_D_HV_DC), board_pchlan },
  
+       { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH2_LV_LM), board_pch2lan },
+       { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH2_LV_V), board_pch2lan },
        { }     /* terminate list */
  };
  MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
@@@ -5932,7 -6044,7 +6042,7 @@@ static int __init e1000_init_module(voi
        int ret;
        pr_info("Intel(R) PRO/1000 Network Driver - %s\n",
                e1000e_driver_version);
-       pr_info("Copyright (c) 1999 - 2009 Intel Corporation.\n");
+       pr_info("Copyright (c) 1999 - 2010 Intel Corporation.\n");
        ret = pci_register_driver(&e1000_driver);
  
        return ret;
index add6197d3bcb0409e6a5641113d8e45549bdab63,048595bc79ad393b18f7352a6da40551be00c494..ec808fa8dc213922c1feef96634f76bddca54c9a
@@@ -48,7 -48,7 +48,7 @@@
  #define DRV_VERSION "1.0.0-k0"
  char igbvf_driver_name[] = "igbvf";
  const char igbvf_driver_version[] = DRV_VERSION;
 -struct pm_qos_request_list *igbvf_driver_pm_qos_req;
 +static struct pm_qos_request_list igbvf_driver_pm_qos_req;
  static const char igbvf_driver_string[] =
                                "Intel(R) Virtual Function Network Driver";
  static const char igbvf_copyright[] = "Copyright (c) 2009 Intel Corporation.";
@@@ -2751,7 -2751,7 +2751,7 @@@ static int __devinit igbvf_probe(struc
                dev_info(&pdev->dev,
                         "PF still in reset state, assigning new address."
                         " Is the PF interface up?\n");
-               random_ether_addr(hw->mac.addr);
+               dev_hw_addr_random(adapter->netdev, hw->mac.addr);
        } else {
                err = hw->mac.ops.read_mac_addr(hw);
                if (err) {
@@@ -2902,8 -2902,8 +2902,8 @@@ static int __init igbvf_init_module(voi
        printk(KERN_INFO "%s\n", igbvf_copyright);
  
        ret = pci_register_driver(&igbvf_driver);
 -      igbvf_driver_pm_qos_req = pm_qos_add_request(PM_QOS_CPU_DMA_LATENCY,
 -                             PM_QOS_DEFAULT_VALUE);
 +      pm_qos_add_request(&igbvf_driver_pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
 +                         PM_QOS_DEFAULT_VALUE);
  
        return ret;
  }
@@@ -2918,7 -2918,8 +2918,7 @@@ module_init(igbvf_init_module)
  static void __exit igbvf_exit_module(void)
  {
        pci_unregister_driver(&igbvf_driver);
 -      pm_qos_remove_request(igbvf_driver_pm_qos_req);
 -      igbvf_driver_pm_qos_req = NULL;
 +      pm_qos_remove_request(&igbvf_driver_pm_qos_req);
  }
  module_exit(igbvf_exit_module);
  
index 5a1bd5db2a93b3bfc3540e5cd81b76d05b553e0e,721a090a01bcce6ad4a2c0244e62bdd3334f3029..0101f2bdf400e7b28eca39d0c9b7a413e2f0d326
@@@ -29,7 -29,6 +29,7 @@@
  #include <linux/mii.h>
  #include <linux/ethtool.h>
  #include <linux/phy.h>
 +#include <linux/marvell_phy.h>
  
  #include <asm/io.h>
  #include <asm/irq.h>
@@@ -49,6 -48,8 +49,6 @@@
  #define MII_M1145_RGMII_RX_DELAY      0x0080
  #define MII_M1145_RGMII_TX_DELAY      0x0002
  
 -#define M1145_DEV_FLAGS_RESISTANCE    0x00000001
 -
  #define MII_M1111_PHY_LED_CONTROL     0x18
  #define MII_M1111_PHY_LED_DIRECT      0x4100
  #define MII_M1111_PHY_LED_COMBINE     0x411c
  #define MII_M1111_COPPER              0
  #define MII_M1111_FIBER                       1
  
+ #define MII_88E1121_PHY_MSCR_PAGE     2
+ #define MII_88E1121_PHY_MSCR_REG      21
+ #define MII_88E1121_PHY_MSCR_RX_DELAY BIT(5)
+ #define MII_88E1121_PHY_MSCR_TX_DELAY BIT(4)
+ #define MII_88E1121_PHY_MSCR_DELAY_MASK       (~(0x3 << 4))
+ #define MII_88EC048_PHY_MSCR1_REG     16
+ #define MII_88EC048_PHY_MSCR1_PAD_ODD BIT(6)
  #define MII_88E1121_PHY_LED_CTRL      16
  #define MII_88E1121_PHY_LED_PAGE      3
  #define MII_88E1121_PHY_LED_DEF               0x0030
@@@ -179,7 -189,30 +188,30 @@@ static int marvell_config_aneg(struct p
  
  static int m88e1121_config_aneg(struct phy_device *phydev)
  {
-       int err, temp;
+       int err, oldpage, mscr;
+       oldpage = phy_read(phydev, MII_88E1121_PHY_PAGE);
+       err = phy_write(phydev, MII_88E1121_PHY_PAGE,
+                       MII_88E1121_PHY_MSCR_PAGE);
+       if (err < 0)
+               return err;
+       mscr = phy_read(phydev, MII_88E1121_PHY_MSCR_REG) &
+               MII_88E1121_PHY_MSCR_DELAY_MASK;
+       if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
+               mscr |= (MII_88E1121_PHY_MSCR_RX_DELAY |
+                        MII_88E1121_PHY_MSCR_TX_DELAY);
+       else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)
+               mscr |= MII_88E1121_PHY_MSCR_RX_DELAY;
+       else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
+               mscr |= MII_88E1121_PHY_MSCR_TX_DELAY;
+       err = phy_write(phydev, MII_88E1121_PHY_MSCR_REG, mscr);
+       if (err < 0)
+               return err;
+       phy_write(phydev, MII_88E1121_PHY_PAGE, oldpage);
  
        err = phy_write(phydev, MII_BMCR, BMCR_RESET);
        if (err < 0)
        if (err < 0)
                return err;
  
-       temp = phy_read(phydev, MII_88E1121_PHY_PAGE);
+       oldpage = phy_read(phydev, MII_88E1121_PHY_PAGE);
  
        phy_write(phydev, MII_88E1121_PHY_PAGE, MII_88E1121_PHY_LED_PAGE);
        phy_write(phydev, MII_88E1121_PHY_LED_CTRL, MII_88E1121_PHY_LED_DEF);
-       phy_write(phydev, MII_88E1121_PHY_PAGE, temp);
+       phy_write(phydev, MII_88E1121_PHY_PAGE, oldpage);
  
        err = genphy_config_aneg(phydev);
  
        return err;
  }
  
+ static int m88ec048_config_aneg(struct phy_device *phydev)
+ {
+       int err, oldpage, mscr;
+       oldpage = phy_read(phydev, MII_88E1121_PHY_PAGE);
+       err = phy_write(phydev, MII_88E1121_PHY_PAGE,
+                       MII_88E1121_PHY_MSCR_PAGE);
+       if (err < 0)
+               return err;
+       mscr = phy_read(phydev, MII_88EC048_PHY_MSCR1_REG);
+       mscr |= MII_88EC048_PHY_MSCR1_PAD_ODD;
+       err = phy_write(phydev, MII_88E1121_PHY_MSCR_REG, mscr);
+       if (err < 0)
+               return err;
+       err = phy_write(phydev, MII_88E1121_PHY_PAGE, oldpage);
+       if (err < 0)
+               return err;
+       return m88e1121_config_aneg(phydev);
+ }
  static int m88e1111_config_init(struct phy_device *phydev)
  {
        int err;
@@@ -349,10 -407,7 +406,10 @@@ static int m88e1118_config_init(struct 
                return err;
  
        /* Adjust LED Control */
 -      err = phy_write(phydev, 0x10, 0x021e);
 +      if (phydev->dev_flags & MARVELL_PHY_M1118_DNS323_LEDS)
 +              err = phy_write(phydev, 0x10, 0x1100);
 +      else
 +              err = phy_write(phydev, 0x10, 0x021e);
        if (err < 0)
                return err;
  
@@@ -400,7 -455,7 +457,7 @@@ static int m88e1145_config_init(struct 
                if (err < 0)
                        return err;
  
 -              if (phydev->dev_flags & M1145_DEV_FLAGS_RESISTANCE) {
 +              if (phydev->dev_flags & MARVELL_PHY_M1145_FLAGS_RESISTANCE) {
                        err = phy_write(phydev, 0x1d, 0x0012);
                        if (err < 0)
                                return err;
@@@ -531,8 -586,8 +588,8 @@@ static int m88e1121_did_interrupt(struc
  
  static struct phy_driver marvell_drivers[] = {
        {
 -              .phy_id = 0x01410c60,
 -              .phy_id_mask = 0xfffffff0,
 +              .phy_id = MARVELL_PHY_ID_88E1101,
 +              .phy_id_mask = MARVELL_PHY_ID_MASK,
                .name = "Marvell 88E1101",
                .features = PHY_GBIT_FEATURES,
                .flags = PHY_HAS_INTERRUPT,
                .driver = { .owner = THIS_MODULE },
        },
        {
 -              .phy_id = 0x01410c90,
 -              .phy_id_mask = 0xfffffff0,
 +              .phy_id = MARVELL_PHY_ID_88E1112,
 +              .phy_id_mask = MARVELL_PHY_ID_MASK,
                .name = "Marvell 88E1112",
                .features = PHY_GBIT_FEATURES,
                .flags = PHY_HAS_INTERRUPT,
                .driver = { .owner = THIS_MODULE },
        },
        {
 -              .phy_id = 0x01410cc0,
 -              .phy_id_mask = 0xfffffff0,
 +              .phy_id = MARVELL_PHY_ID_88E1111,
 +              .phy_id_mask = MARVELL_PHY_ID_MASK,
                .name = "Marvell 88E1111",
                .features = PHY_GBIT_FEATURES,
                .flags = PHY_HAS_INTERRUPT,
                .driver = { .owner = THIS_MODULE },
        },
        {
 -              .phy_id = 0x01410e10,
 -              .phy_id_mask = 0xfffffff0,
 +              .phy_id = MARVELL_PHY_ID_88E1118,
 +              .phy_id_mask = MARVELL_PHY_ID_MASK,
                .name = "Marvell 88E1118",
                .features = PHY_GBIT_FEATURES,
                .flags = PHY_HAS_INTERRUPT,
                .driver = {.owner = THIS_MODULE,},
        },
        {
 -              .phy_id = 0x01410cb0,
 -              .phy_id_mask = 0xfffffff0,
 +              .phy_id = MARVELL_PHY_ID_88E1121R,
 +              .phy_id_mask = MARVELL_PHY_ID_MASK,
                .name = "Marvell 88E1121R",
                .features = PHY_GBIT_FEATURES,
                .flags = PHY_HAS_INTERRUPT,
                .did_interrupt = &m88e1121_did_interrupt,
                .driver = { .owner = THIS_MODULE },
        },
 -              .phy_id = 0x01410e90,
 -              .phy_id_mask = 0xfffffff0,
+       {
++              .phy_id = MARVELL_PHY_ID_88EC048,
++              .phy_id_mask = MARVELL_PHY_ID_MASK,
+               .name = "Marvell 88EC048",
+               .features = PHY_GBIT_FEATURES,
+               .flags = PHY_HAS_INTERRUPT,
+               .config_aneg = &m88ec048_config_aneg,
+               .read_status = &marvell_read_status,
+               .ack_interrupt = &marvell_ack_interrupt,
+               .config_intr = &marvell_config_intr,
+               .did_interrupt = &m88e1121_did_interrupt,
+               .driver = { .owner = THIS_MODULE },
+       },
        {
 -              .phy_id = 0x01410cd0,
 -              .phy_id_mask = 0xfffffff0,
 +              .phy_id = MARVELL_PHY_ID_88E1145,
 +              .phy_id_mask = MARVELL_PHY_ID_MASK,
                .name = "Marvell 88E1145",
                .features = PHY_GBIT_FEATURES,
                .flags = PHY_HAS_INTERRUPT,
                .driver = { .owner = THIS_MODULE },
        },
        {
 -              .phy_id = 0x01410e30,
 -              .phy_id_mask = 0xfffffff0,
 +              .phy_id = MARVELL_PHY_ID_88E1240,
 +              .phy_id_mask = MARVELL_PHY_ID_MASK,
                .name = "Marvell 88E1240",
                .features = PHY_GBIT_FEATURES,
                .flags = PHY_HAS_INTERRUPT,
@@@ -659,6 -727,7 +729,7 @@@ static struct mdio_device_id marvell_tb
        { 0x01410cb0, 0xfffffff0 },
        { 0x01410cd0, 0xfffffff0 },
        { 0x01410e30, 0xfffffff0 },
+       { 0x01410e90, 0xfffffff0 },
        { }
  };
  
index 06b552fca63d7724b2c382fa4d2280dbaba8b0fe,960962660079854cd07915c64d27322e98fda82f..5efa57757a2c8507f5bcf0d0d7f3ac5d1b5a26c3
@@@ -262,13 -262,13 +262,13 @@@ struct de_srom_media_block 
        u16                     csr13;
        u16                     csr14;
        u16                     csr15;
- } __attribute__((packed));
+ } __packed;
  
  struct de_srom_info_leaf {
        u16                     default_media;
        u8                      n_blocks;
        u8                      unused;
- } __attribute__((packed));
+ } __packed;
  
  struct de_desc {
        __le32                  opts1;
@@@ -367,8 -367,8 +367,8 @@@ static u16 t21041_csr14[] = { 0xFFFF, 0
  static u16 t21041_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
  
  
 -#define dr32(reg)             readl(de->regs + (reg))
 -#define dw32(reg,val)         writel((val), de->regs + (reg))
 +#define dr32(reg)     ioread32(de->regs + (reg))
 +#define dw32(reg, val)        iowrite32((val), de->regs + (reg))
  
  
  static void de_rx_err_acct (struct de_private *de, unsigned rx_tail,
@@@ -1706,7 -1706,6 +1706,7 @@@ static void __devinit de21040_get_mac_a
                int value, boguscnt = 100000;
                do {
                        value = dr32(ROMCmd);
 +                      rmb();
                } while (value < 0 && --boguscnt > 0);
                de->dev->dev_addr[i] = value;
                udelay(1);
index 7f0d98b885bc9248f0958de8c77eafdb942f6d85,5bbff4c5a4895b51acc66351bfcf18b212eeea3d..c24c5efeae1f211e3a68c4b30ebd1dadd840ccf6
@@@ -174,7 -174,7 +174,7 @@@ that only one external action is invoke
  #define DRV_DESCRIPTION       "Intel(R) PRO/Wireless 2100 Network Driver"
  #define DRV_COPYRIGHT "Copyright(c) 2003-2006 Intel Corporation"
  
- struct pm_qos_request_list ipw2100_pm_qos_req;
 -static struct pm_qos_request_list *ipw2100_pm_qos_req;
++static struct pm_qos_request_list ipw2100_pm_qos_req;
  
  /* Debugging stuff */
  #ifdef CONFIG_IPW2100_DEBUG
@@@ -1741,7 -1741,7 +1741,7 @@@ static int ipw2100_up(struct ipw2100_pr
        /* the ipw2100 hardware really doesn't want power management delays
         * longer than 175usec
         */
 -      pm_qos_update_request(ipw2100_pm_qos_req, 175);
 +      pm_qos_update_request(&ipw2100_pm_qos_req, 175);
  
        /* If the interrupt is enabled, turn it off... */
        spin_lock_irqsave(&priv->low_lock, flags);
@@@ -1889,7 -1889,7 +1889,7 @@@ static void ipw2100_down(struct ipw2100
        ipw2100_disable_interrupts(priv);
        spin_unlock_irqrestore(&priv->low_lock, flags);
  
 -      pm_qos_update_request(ipw2100_pm_qos_req, PM_QOS_DEFAULT_VALUE);
 +      pm_qos_update_request(&ipw2100_pm_qos_req, PM_QOS_DEFAULT_VALUE);
  
        /* We have to signal any supplicant if we are disassociating */
        if (associated)
@@@ -3467,10 -3467,8 +3467,8 @@@ static int ipw2100_msg_allocate(struct 
        dma_addr_t p;
  
        priv->msg_buffers =
-           (struct ipw2100_tx_packet *)kmalloc(IPW_COMMAND_POOL_SIZE *
-                                               sizeof(struct
-                                                      ipw2100_tx_packet),
-                                               GFP_KERNEL);
+           kmalloc(IPW_COMMAND_POOL_SIZE * sizeof(struct ipw2100_tx_packet),
+                   GFP_KERNEL);
        if (!priv->msg_buffers) {
                printk(KERN_ERR DRV_NAME ": %s: PCI alloc failed for msg "
                       "buffers.\n", priv->net_dev->name);
@@@ -4499,10 -4497,8 +4497,8 @@@ static int ipw2100_tx_allocate(struct i
        }
  
        priv->tx_buffers =
-           (struct ipw2100_tx_packet *)kmalloc(TX_PENDED_QUEUE_LENGTH *
-                                               sizeof(struct
-                                                      ipw2100_tx_packet),
-                                               GFP_ATOMIC);
+           kmalloc(TX_PENDED_QUEUE_LENGTH * sizeof(struct ipw2100_tx_packet),
+                   GFP_ATOMIC);
        if (!priv->tx_buffers) {
                printk(KERN_ERR DRV_NAME
                       ": %s: alloc failed form tx buffers.\n",
@@@ -4651,9 -4647,9 +4647,9 @@@ static int ipw2100_rx_allocate(struct i
        /*
         * allocate packets
         */
-       priv->rx_buffers = (struct ipw2100_rx_packet *)
-           kmalloc(RX_QUEUE_LENGTH * sizeof(struct ipw2100_rx_packet),
-                   GFP_KERNEL);
+       priv->rx_buffers = kmalloc(RX_QUEUE_LENGTH *
+                                  sizeof(struct ipw2100_rx_packet),
+                                  GFP_KERNEL);
        if (!priv->rx_buffers) {
                IPW_DEBUG_INFO("can't allocate rx packet buffer table\n");
  
@@@ -5233,7 -5229,7 +5229,7 @@@ struct security_info_params 
        u8 auth_mode;
        u8 replay_counters_number;
        u8 unicast_using_group;
- } __attribute__ ((packed));
+ } __packed;
  
  static int ipw2100_set_security_information(struct ipw2100_priv *priv,
                                            int auth_mode,
@@@ -6669,8 -6665,8 +6665,8 @@@ static int __init ipw2100_init(void
        if (ret)
                goto out;
  
 -      ipw2100_pm_qos_req = pm_qos_add_request(PM_QOS_CPU_DMA_LATENCY,
 -                      PM_QOS_DEFAULT_VALUE);
 +      pm_qos_add_request(&ipw2100_pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
 +                         PM_QOS_DEFAULT_VALUE);
  #ifdef CONFIG_IPW2100_DEBUG
        ipw2100_debug_level = debug;
        ret = driver_create_file(&ipw2100_pci_driver.driver,
@@@ -6692,7 -6688,7 +6688,7 @@@ static void __exit ipw2100_exit(void
                           &driver_attr_debug_level);
  #endif
        pci_unregister_driver(&ipw2100_pci_driver);
 -      pm_qos_remove_request(ipw2100_pm_qos_req);
 +      pm_qos_remove_request(&ipw2100_pm_qos_req);
  }
  
  module_init(ipw2100_init);
@@@ -8475,7 -8471,7 +8471,7 @@@ struct ipw2100_fw_header 
        short mode;
        unsigned int fw_size;
        unsigned int uc_size;
- } __attribute__ ((packed));
+ } __packed;
  
  static int ipw2100_mod_firmware_load(struct ipw2100_fw *fw)
  {
diff --combined drivers/parisc/led.c
index d02be78a41386b2ecb94c249cff8da11776ecb4a,18dff43b8bd25bb68edabe6b87bf952c8f23f66a..c5c14dd3734f6a022f102417ed510e2f73ca5267
@@@ -176,18 -176,16 +176,18 @@@ static ssize_t led_proc_write(struct fi
        size_t count, loff_t *pos)
  {
        void *data = PDE(file->f_path.dentry->d_inode)->data;
 -      char *cur, lbuf[count + 1];
 +      char *cur, lbuf[32];
        int d;
  
        if (!capable(CAP_SYS_ADMIN))
                return -EACCES;
  
 -      memset(lbuf, 0, count + 1);
 +      if (count >= sizeof(lbuf))
 +              count = sizeof(lbuf)-1;
  
        if (copy_from_user(lbuf, buf, count))
                return -EFAULT;
 +      lbuf[count] = 0;
  
        cur = lbuf;
  
@@@ -357,12 -355,13 +357,13 @@@ static __inline__ int led_get_net_activ
        rcu_read_lock();
        for_each_netdev_rcu(&init_net, dev) {
            const struct net_device_stats *stats;
+           struct rtnl_link_stats64 temp;
            struct in_device *in_dev = __in_dev_get_rcu(dev);
            if (!in_dev || !in_dev->ifa_list)
                continue;
            if (ipv4_is_loopback(in_dev->ifa_list->ifa_local))
                continue;
-           stats = dev_get_stats(dev);
+           stats = dev_get_stats(dev, &temp);
            rx_total += stats->rx_packets;
            tx_total += stats->tx_packets;
        }
diff --combined drivers/vhost/net.c
index d219070fed3da07b3944ac53363673f310435f33,f13e56babe4b53b7e3689e39c147535ea8daea66..29e850a7a2f9871b7c9658e0717f8926dc5bc4ac
@@@ -74,6 -74,22 +74,22 @@@ static int move_iovec_hdr(struct iovec 
        }
        return seg;
  }
+ /* Copy iovec entries for len bytes from iovec. */
+ static void copy_iovec_hdr(const struct iovec *from, struct iovec *to,
+                          size_t len, int iovcount)
+ {
+       int seg = 0;
+       size_t size;
+       while (len && seg < iovcount) {
+               size = min(from->iov_len, len);
+               to->iov_base = from->iov_base;
+               to->iov_len = size;
+               len -= size;
+               ++from;
+               ++to;
+               ++seg;
+       }
+ }
  
  /* Caller must have TX VQ lock */
  static void tx_poll_stop(struct vhost_net *net)
@@@ -129,7 -145,7 +145,7 @@@ static void handle_tx(struct vhost_net 
  
        if (wmem < sock->sk->sk_sndbuf / 2)
                tx_poll_stop(net);
-       hdr_size = vq->hdr_size;
+       hdr_size = vq->vhost_hlen;
  
        for (;;) {
                head = vhost_get_vq_desc(&net->dev, vq, vq->iov,
                /* TODO: Check specific error and bomb out unless ENOBUFS? */
                err = sock->ops->sendmsg(NULL, sock, &msg, len);
                if (unlikely(err < 0)) {
-                       vhost_discard_vq_desc(vq);
+                       vhost_discard_vq_desc(vq, 1);
                        tx_poll_start(net, sock);
                        break;
                }
        unuse_mm(net->dev.mm);
  }
  
+ static int peek_head_len(struct sock *sk)
+ {
+       struct sk_buff *head;
+       int len = 0;
+       lock_sock(sk);
+       head = skb_peek(&sk->sk_receive_queue);
+       if (head)
+               len = head->len;
+       release_sock(sk);
+       return len;
+ }
+ /* This is a multi-buffer version of vhost_get_desc, that works if
+  *    vq has read descriptors only.
+  * @vq                - the relevant virtqueue
+  * @datalen   - data length we'll be reading
+  * @iovcount  - returned count of io vectors we fill
+  * @log               - vhost log
+  * @log_num   - log offset
+  *    returns number of buffer heads allocated, negative on error
+  */
+ static int get_rx_bufs(struct vhost_virtqueue *vq,
+                      struct vring_used_elem *heads,
+                      int datalen,
+                      unsigned *iovcount,
+                      struct vhost_log *log,
+                      unsigned *log_num)
+ {
+       unsigned int out, in;
+       int seg = 0;
+       int headcount = 0;
+       unsigned d;
+       int r, nlogs = 0;
+       while (datalen > 0) {
+               if (unlikely(headcount >= VHOST_NET_MAX_SG)) {
+                       r = -ENOBUFS;
+                       goto err;
+               }
+               d = vhost_get_vq_desc(vq->dev, vq, vq->iov + seg,
+                                     ARRAY_SIZE(vq->iov) - seg, &out,
+                                     &in, log, log_num);
+               if (d == vq->num) {
+                       r = 0;
+                       goto err;
+               }
+               if (unlikely(out || in <= 0)) {
+                       vq_err(vq, "unexpected descriptor format for RX: "
+                               "out %d, in %d\n", out, in);
+                       r = -EINVAL;
+                       goto err;
+               }
+               if (unlikely(log)) {
+                       nlogs += *log_num;
+                       log += *log_num;
+               }
+               heads[headcount].id = d;
+               heads[headcount].len = iov_length(vq->iov + seg, in);
+               datalen -= heads[headcount].len;
+               ++headcount;
+               seg += in;
+       }
+       heads[headcount - 1].len += datalen;
+       *iovcount = seg;
+       if (unlikely(log))
+               *log_num = nlogs;
+       return headcount;
+ err:
+       vhost_discard_vq_desc(vq, headcount);
+       return r;
+ }
  /* Expects to be always run from workqueue - which acts as
   * read-size critical section for our kind of RCU. */
- static void handle_rx(struct vhost_net *net)
+ static void handle_rx_big(struct vhost_net *net)
  {
        struct vhost_virtqueue *vq = &net->dev.vqs[VHOST_NET_VQ_RX];
        unsigned out, in, log, s;
        use_mm(net->dev.mm);
        mutex_lock(&vq->mutex);
        vhost_disable_notify(vq);
-       hdr_size = vq->hdr_size;
+       hdr_size = vq->vhost_hlen;
  
        vq_log = unlikely(vhost_has_feature(&net->dev, VHOST_F_LOG_ALL)) ?
                vq->log : NULL;
                                         len, MSG_DONTWAIT | MSG_TRUNC);
                /* TODO: Check specific error and bomb out unless EAGAIN? */
                if (err < 0) {
-                       vhost_discard_vq_desc(vq);
+                       vhost_discard_vq_desc(vq, 1);
                        break;
                }
                /* TODO: Should check and handle checksum. */
                if (err > len) {
                        pr_debug("Discarded truncated rx packet: "
                                 " len %d > %zd\n", err, len);
-                       vhost_discard_vq_desc(vq);
+                       vhost_discard_vq_desc(vq, 1);
                        continue;
                }
                len = err;
        unuse_mm(net->dev.mm);
  }
  
- static void handle_tx_kick(struct work_struct *work)
+ /* Expects to be always run from workqueue - which acts as
+  * read-size critical section for our kind of RCU. */
+ static void handle_rx_mergeable(struct vhost_net *net)
  {
-       struct vhost_virtqueue *vq;
-       struct vhost_net *net;
-       vq = container_of(work, struct vhost_virtqueue, poll.work);
-       net = container_of(vq->dev, struct vhost_net, dev);
+       struct vhost_virtqueue *vq = &net->dev.vqs[VHOST_NET_VQ_RX];
+       unsigned uninitialized_var(in), log;
+       struct vhost_log *vq_log;
+       struct msghdr msg = {
+               .msg_name = NULL,
+               .msg_namelen = 0,
+               .msg_control = NULL, /* FIXME: get and handle RX aux data. */
+               .msg_controllen = 0,
+               .msg_iov = vq->iov,
+               .msg_flags = MSG_DONTWAIT,
+       };
+       struct virtio_net_hdr_mrg_rxbuf hdr = {
+               .hdr.flags = 0,
+               .hdr.gso_type = VIRTIO_NET_HDR_GSO_NONE
+       };
+       size_t total_len = 0;
+       int err, headcount;
+       size_t vhost_hlen, sock_hlen;
+       size_t vhost_len, sock_len;
+       struct socket *sock = rcu_dereference(vq->private_data);
+       if (!sock || skb_queue_empty(&sock->sk->sk_receive_queue))
+               return;
+       use_mm(net->dev.mm);
+       mutex_lock(&vq->mutex);
+       vhost_disable_notify(vq);
+       vhost_hlen = vq->vhost_hlen;
+       sock_hlen = vq->sock_hlen;
+       vq_log = unlikely(vhost_has_feature(&net->dev, VHOST_F_LOG_ALL)) ?
+               vq->log : NULL;
+       while ((sock_len = peek_head_len(sock->sk))) {
+               sock_len += sock_hlen;
+               vhost_len = sock_len + vhost_hlen;
+               headcount = get_rx_bufs(vq, vq->heads, vhost_len,
+                                       &in, vq_log, &log);
+               /* On error, stop handling until the next kick. */
+               if (unlikely(headcount < 0))
+                       break;
+               /* OK, now we need to know about added descriptors. */
+               if (!headcount) {
+                       if (unlikely(vhost_enable_notify(vq))) {
+                               /* They have slipped one in as we were
+                                * doing that: check again. */
+                               vhost_disable_notify(vq);
+                               continue;
+                       }
+                       /* Nothing new?  Wait for eventfd to tell us
+                        * they refilled. */
+                       break;
+               }
+               /* We don't need to be notified again. */
+               if (unlikely((vhost_hlen)))
+                       /* Skip header. TODO: support TSO. */
+                       move_iovec_hdr(vq->iov, vq->hdr, vhost_hlen, in);
+               else
+                       /* Copy the header for use in VIRTIO_NET_F_MRG_RXBUF:
+                        * needed because sendmsg can modify msg_iov. */
+                       copy_iovec_hdr(vq->iov, vq->hdr, sock_hlen, in);
+               msg.msg_iovlen = in;
+               err = sock->ops->recvmsg(NULL, sock, &msg,
+                                        sock_len, MSG_DONTWAIT | MSG_TRUNC);
+               /* Userspace might have consumed the packet meanwhile:
+                * it's not supposed to do this usually, but might be hard
+                * to prevent. Discard data we got (if any) and keep going. */
+               if (unlikely(err != sock_len)) {
+                       pr_debug("Discarded rx packet: "
+                                " len %d, expected %zd\n", err, sock_len);
+                       vhost_discard_vq_desc(vq, headcount);
+                       continue;
+               }
+               if (unlikely(vhost_hlen) &&
+                   memcpy_toiovecend(vq->hdr, (unsigned char *)&hdr, 0,
+                                     vhost_hlen)) {
+                       vq_err(vq, "Unable to write vnet_hdr at addr %p\n",
+                              vq->iov->iov_base);
+                       break;
+               }
+               /* TODO: Should check and handle checksum. */
+               if (vhost_has_feature(&net->dev, VIRTIO_NET_F_MRG_RXBUF) &&
+                   memcpy_toiovecend(vq->hdr, (unsigned char *)&headcount,
+                                     offsetof(typeof(hdr), num_buffers),
+                                     sizeof hdr.num_buffers)) {
+                       vq_err(vq, "Failed num_buffers write");
+                       vhost_discard_vq_desc(vq, headcount);
+                       break;
+               }
+               vhost_add_used_and_signal_n(&net->dev, vq, vq->heads,
+                                           headcount);
+               if (unlikely(vq_log))
+                       vhost_log_write(vq, vq_log, log, vhost_len);
+               total_len += vhost_len;
+               if (unlikely(total_len >= VHOST_NET_WEIGHT)) {
+                       vhost_poll_queue(&vq->poll);
+                       break;
+               }
+       }
+       mutex_unlock(&vq->mutex);
+       unuse_mm(net->dev.mm);
+ }
+ static void handle_rx(struct vhost_net *net)
+ {
+       if (vhost_has_feature(&net->dev, VIRTIO_NET_F_MRG_RXBUF))
+               handle_rx_mergeable(net);
+       else
+               handle_rx_big(net);
+ }
+ static void handle_tx_kick(struct vhost_work *work)
+ {
+       struct vhost_virtqueue *vq = container_of(work, struct vhost_virtqueue,
+                                                 poll.work);
+       struct vhost_net *net = container_of(vq->dev, struct vhost_net, dev);
        handle_tx(net);
  }
  
- static void handle_rx_kick(struct work_struct *work)
+ static void handle_rx_kick(struct vhost_work *work)
  {
-       struct vhost_virtqueue *vq;
-       struct vhost_net *net;
-       vq = container_of(work, struct vhost_virtqueue, poll.work);
-       net = container_of(vq->dev, struct vhost_net, dev);
+       struct vhost_virtqueue *vq = container_of(work, struct vhost_virtqueue,
+                                                 poll.work);
+       struct vhost_net *net = container_of(vq->dev, struct vhost_net, dev);
        handle_rx(net);
  }
  
- static void handle_tx_net(struct work_struct *work)
+ static void handle_tx_net(struct vhost_work *work)
  {
-       struct vhost_net *net;
-       net = container_of(work, struct vhost_net, poll[VHOST_NET_VQ_TX].work);
+       struct vhost_net *net = container_of(work, struct vhost_net,
+                                            poll[VHOST_NET_VQ_TX].work);
        handle_tx(net);
  }
  
- static void handle_rx_net(struct work_struct *work)
+ static void handle_rx_net(struct vhost_work *work)
  {
-       struct vhost_net *net;
-       net = container_of(work, struct vhost_net, poll[VHOST_NET_VQ_RX].work);
+       struct vhost_net *net = container_of(work, struct vhost_net,
+                                            poll[VHOST_NET_VQ_RX].work);
        handle_rx(net);
  }
  
  static int vhost_net_open(struct inode *inode, struct file *f)
  {
        struct vhost_net *n = kmalloc(sizeof *n, GFP_KERNEL);
+       struct vhost_dev *dev;
        int r;
        if (!n)
                return -ENOMEM;
+       dev = &n->dev;
        n->vqs[VHOST_NET_VQ_TX].handle_kick = handle_tx_kick;
        n->vqs[VHOST_NET_VQ_RX].handle_kick = handle_rx_kick;
-       r = vhost_dev_init(&n->dev, n->vqs, VHOST_NET_VQ_MAX);
+       r = vhost_dev_init(dev, n->vqs, VHOST_NET_VQ_MAX);
        if (r < 0) {
                kfree(n);
                return r;
        }
  
-       vhost_poll_init(n->poll + VHOST_NET_VQ_TX, handle_tx_net, POLLOUT);
-       vhost_poll_init(n->poll + VHOST_NET_VQ_RX, handle_rx_net, POLLIN);
+       vhost_poll_init(n->poll + VHOST_NET_VQ_TX, handle_tx_net, POLLOUT, dev);
+       vhost_poll_init(n->poll + VHOST_NET_VQ_RX, handle_rx_net, POLLIN, dev);
        n->tx_poll_state = VHOST_NET_POLL_DISABLED;
  
        f->private_data = n;
@@@ -527,13 -737,12 +737,12 @@@ static long vhost_net_set_backend(struc
  
        /* start polling new socket */
        oldsock = vq->private_data;
-       if (sock == oldsock)
-               goto done;
+       if (sock != oldsock) {
+                 vhost_net_disable_vq(n, vq);
+                 rcu_assign_pointer(vq->private_data, sock);
+                 vhost_net_enable_vq(n, vq);
+       }
  
-       vhost_net_disable_vq(n, vq);
-       rcu_assign_pointer(vq->private_data, sock);
-       vhost_net_enable_vq(n, vq);
- done:
        mutex_unlock(&vq->mutex);
  
        if (oldsock) {
@@@ -574,9 -783,21 +783,21 @@@ done
  
  static int vhost_net_set_features(struct vhost_net *n, u64 features)
  {
-       size_t hdr_size = features & (1 << VHOST_NET_F_VIRTIO_NET_HDR) ?
-               sizeof(struct virtio_net_hdr) : 0;
+       size_t vhost_hlen, sock_hlen, hdr_len;
        int i;
+       hdr_len = (features & (1 << VIRTIO_NET_F_MRG_RXBUF)) ?
+                       sizeof(struct virtio_net_hdr_mrg_rxbuf) :
+                       sizeof(struct virtio_net_hdr);
+       if (features & (1 << VHOST_NET_F_VIRTIO_NET_HDR)) {
+               /* vhost provides vnet_hdr */
+               vhost_hlen = hdr_len;
+               sock_hlen = 0;
+       } else {
+               /* socket provides vnet_hdr */
+               vhost_hlen = 0;
+               sock_hlen = hdr_len;
+       }
        mutex_lock(&n->dev.mutex);
        if ((features & (1 << VHOST_F_LOG_ALL)) &&
            !vhost_log_access_ok(&n->dev)) {
        smp_wmb();
        for (i = 0; i < VHOST_NET_VQ_MAX; ++i) {
                mutex_lock(&n->vqs[i].mutex);
-               n->vqs[i].hdr_size = hdr_size;
+               n->vqs[i].vhost_hlen = vhost_hlen;
+               n->vqs[i].sock_hlen = sock_hlen;
                mutex_unlock(&n->vqs[i].mutex);
        }
        vhost_net_flush(n);
@@@ -639,7 -861,7 +861,7 @@@ static long vhost_net_compat_ioctl(stru
  }
  #endif
  
const static struct file_operations vhost_net_fops = {
static const struct file_operations vhost_net_fops = {
        .owner          = THIS_MODULE,
        .release        = vhost_net_release,
        .unlocked_ioctl = vhost_net_ioctl,
  };
  
  static struct miscdevice vhost_net_misc = {
 -      VHOST_NET_MINOR,
 +      MISC_DYNAMIC_MINOR,
        "vhost-net",
        &vhost_net_fops,
  };
  
  static int vhost_net_init(void)
  {
-       int r = vhost_init();
-       if (r)
-               goto err_init;
-       r = misc_register(&vhost_net_misc);
-       if (r)
-               goto err_reg;
-       return 0;
- err_reg:
-       vhost_cleanup();
- err_init:
-       return r;
+       return misc_register(&vhost_net_misc);
  }
  module_init(vhost_net_init);
  
  static void vhost_net_exit(void)
  {
        misc_deregister(&vhost_net_misc);
-       vhost_cleanup();
  }
  module_exit(vhost_net_exit);
  
diff --combined firmware/Makefile
index 020e629a615cea43c705aa4bb40e3c0384f3161a,6e0dd3e07a05d5798f03ddec88bfe06576366938..b27f09f05d177fb45cd0dc25f674853656ad3789
@@@ -42,7 -42,7 +42,7 @@@ fw-shipped-$(CONFIG_CASSINI) += sun/cas
  fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin
  fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
                                   cxgb3/t3c_psram-1.1.0.bin \
-                                  cxgb3/t3fw-7.4.0.bin \
+                                  cxgb3/t3fw-7.10.0.bin \
                                   cxgb3/ael2005_opt_edc.bin \
                                   cxgb3/ael2005_twx_edc.bin \
                                   cxgb3/ael2020_twx_edc.bin
@@@ -83,7 -83,6 +83,7 @@@ fw-shipped-$(CONFIG_SCSI_ADVANSYS) += a
  fw-shipped-$(CONFIG_SCSI_QLOGIC_1280) += qlogic/1040.bin qlogic/1280.bin \
                                         qlogic/12160.bin
  fw-shipped-$(CONFIG_SCSI_QLOGICPTI) += qlogic/isp1000.bin
 +fw-shipped-$(CONFIG_INFINIBAND_QIB) += qlogic/sd7220.fw
  fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin
  fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp
  fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \
diff --combined include/linux/cgroup.h
index e3d00fdb858dc3cbf7e35b7d75a93b9c4b7321f3,e0aa067d1b11689b89989d3392ab0d0e6da7f4f6..ed3e92e41c6e5683ad3dbb823e48259f5150ac33
@@@ -525,21 -525,13 +525,21 @@@ static inline struct cgroup_subsys_stat
        return cgrp->subsys[subsys_id];
  }
  
 -static inline struct cgroup_subsys_state *task_subsys_state(
 -      struct task_struct *task, int subsys_id)
 +/*
 + * function to get the cgroup_subsys_state which allows for extra
 + * rcu_dereference_check() conditions, such as locks used during the
 + * cgroup_subsys::attach() methods.
 + */
 +#define task_subsys_state_check(task, subsys_id, __c)                 \
 +      rcu_dereference_check(task->cgroups->subsys[subsys_id],         \
 +                            rcu_read_lock_held() ||                   \
 +                            lockdep_is_held(&task->alloc_lock) ||     \
 +                            cgroup_lock_is_held() || (__c))
 +
 +static inline struct cgroup_subsys_state *
 +task_subsys_state(struct task_struct *task, int subsys_id)
  {
 -      return rcu_dereference_check(task->cgroups->subsys[subsys_id],
 -                                   rcu_read_lock_held() ||
 -                                   lockdep_is_held(&task->alloc_lock) ||
 -                                   cgroup_lock_is_held());
 +      return task_subsys_state_check(task, subsys_id, false);
  }
  
  static inline struct cgroup* task_cgroup(struct task_struct *task,
@@@ -578,6 -570,7 +578,7 @@@ struct task_struct *cgroup_iter_next(st
  void cgroup_iter_end(struct cgroup *cgrp, struct cgroup_iter *it);
  int cgroup_scan_tasks(struct cgroup_scanner *scan);
  int cgroup_attach_task(struct cgroup *, struct task_struct *);
+ int cgroup_attach_task_current_cg(struct task_struct *);
  
  /*
   * CSS ID is ID for cgroup_subsys_state structs under subsys. This only works
@@@ -634,6 -627,12 +635,12 @@@ static inline int cgroupstats_build(str
        return -EINVAL;
  }
  
+ /* No cgroups - nothing to do */
+ static inline int cgroup_attach_task_current_cg(struct task_struct *t)
+ {
+       return 0;
+ }
  #endif /* !CONFIG_CGROUPS */
  
  #endif /* _LINUX_CGROUP_H */
index 2ed4fb8bbd517c606c459d29b2072ab49e6153e6,0000000000000000000000000000000000000000..d0f08018335d4a8144e9b524e93484beab39ebf0
mode 100644,000000..100644
--- /dev/null
@@@ -1,20 -1,0 +1,21 @@@
 +#ifndef _MARVELL_PHY_H
 +#define _MARVELL_PHY_H
 +
 +/* Mask used for ID comparisons */
 +#define MARVELL_PHY_ID_MASK           0xfffffff0
 +
 +/* Known PHY IDs */
 +#define MARVELL_PHY_ID_88E1101                0x01410c60
 +#define MARVELL_PHY_ID_88E1112                0x01410c90
 +#define MARVELL_PHY_ID_88E1111                0x01410cc0
 +#define MARVELL_PHY_ID_88E1118                0x01410e10
 +#define MARVELL_PHY_ID_88E1121R               0x01410cb0
 +#define MARVELL_PHY_ID_88E1145                0x01410cd0
 +#define MARVELL_PHY_ID_88E1240                0x01410e30
++#define MARVELL_PHY_ID_88EC048                0x01410e90
 +
 +/* struct phy_device dev_flags definitions */
 +#define MARVELL_PHY_M1145_FLAGS_RESISTANCE    0x00000001
 +#define MARVELL_PHY_M1118_DNS323_LEDS         0x00000002
 +
 +#endif /* _MARVELL_PHY_H */
index 2f22119b4b0835aff9f941655781feaac2d7bcdc,1bca6171b1aa2d03691af0de3c89216a1977d9a6..d52b570569be674c760bc1dc4c3d1754e802d668
@@@ -54,6 -54,7 +54,7 @@@
  
  struct vlan_group;
  struct netpoll_info;
+ struct phy_device;
  /* 802.11 specific */
  struct wireless_dev;
                                        /* source back-compat hooks */
  #define HAVE_FREE_NETDEV              /* free_netdev() */
  #define HAVE_NETDEV_PRIV              /* netdev_priv() */
  
+ /* hardware address assignment types */
+ #define NET_ADDR_PERM         0       /* address is permanent (default) */
+ #define NET_ADDR_RANDOM               1       /* address is generated randomly */
+ #define NET_ADDR_STOLEN               2       /* address is stolen from other device */
  /* Backlog congestion levels */
  #define NET_RX_SUCCESS                0       /* keep 'em coming, baby */
  #define NET_RX_DROP           1       /* packet dropped */
@@@ -159,45 -165,39 +165,39 @@@ static inline bool dev_xmit_complete(in
  #define MAX_HEADER (LL_MAX_HEADER + 48)
  #endif
  
- #endif  /*  __KERNEL__  */
  /*
-  *    Network device statistics. Akin to the 2.0 ether stats but
-  *    with byte counters.
+  *    Old network device statistics. Fields are native words
+  *    (unsigned long) so they can be read and written atomically.
   */
  
  struct net_device_stats {
-       unsigned long   rx_packets;             /* total packets received       */
-       unsigned long   tx_packets;             /* total packets transmitted    */
-       unsigned long   rx_bytes;               /* total bytes received         */
-       unsigned long   tx_bytes;               /* total bytes transmitted      */
-       unsigned long   rx_errors;              /* bad packets received         */
-       unsigned long   tx_errors;              /* packet transmit problems     */
-       unsigned long   rx_dropped;             /* no space in linux buffers    */
-       unsigned long   tx_dropped;             /* no space available in linux  */
-       unsigned long   multicast;              /* multicast packets received   */
+       unsigned long   rx_packets;
+       unsigned long   tx_packets;
+       unsigned long   rx_bytes;
+       unsigned long   tx_bytes;
+       unsigned long   rx_errors;
+       unsigned long   tx_errors;
+       unsigned long   rx_dropped;
+       unsigned long   tx_dropped;
+       unsigned long   multicast;
        unsigned long   collisions;
-       /* detailed rx_errors: */
        unsigned long   rx_length_errors;
-       unsigned long   rx_over_errors;         /* receiver ring buff overflow  */
-       unsigned long   rx_crc_errors;          /* recved pkt with crc error    */
-       unsigned long   rx_frame_errors;        /* recv'd frame alignment error */
-       unsigned long   rx_fifo_errors;         /* recv'r fifo overrun          */
-       unsigned long   rx_missed_errors;       /* receiver missed packet       */
-       /* detailed tx_errors */
+       unsigned long   rx_over_errors;
+       unsigned long   rx_crc_errors;
+       unsigned long   rx_frame_errors;
+       unsigned long   rx_fifo_errors;
+       unsigned long   rx_missed_errors;
        unsigned long   tx_aborted_errors;
        unsigned long   tx_carrier_errors;
        unsigned long   tx_fifo_errors;
        unsigned long   tx_heartbeat_errors;
        unsigned long   tx_window_errors;
-       
-       /* for cslip etc */
        unsigned long   rx_compressed;
        unsigned long   tx_compressed;
  };
  
+ #endif  /*  __KERNEL__  */
  
  /* Media selection options. */
  enum {
@@@ -381,6 -381,8 +381,8 @@@ enum gro_result 
  };
  typedef enum gro_result gro_result_t;
  
+ typedef struct sk_buff *rx_handler_func_t(struct sk_buff *skb);
  extern void __napi_schedule(struct napi_struct *n);
  
  static inline int napi_disable_pending(struct napi_struct *n)
@@@ -504,9 -506,9 +506,9 @@@ struct netdev_queue 
         * please use this field instead of dev->trans_start
         */
        unsigned long           trans_start;
-       unsigned long           tx_bytes;
-       unsigned long           tx_packets;
-       unsigned long           tx_dropped;
+       u64                     tx_bytes;
+       u64                     tx_packets;
+       u64                     tx_dropped;
  } ____cacheline_aligned_in_smp;
  
  #ifdef CONFIG_RPS
@@@ -660,10 -662,19 +662,19 @@@ struct netdev_rx_queue 
   *    Callback uses when the transmitter has not made any progress
   *    for dev->watchdog ticks.
   *
+  * struct rtnl_link_stats64* (*ndo_get_stats64)(struct net_device *dev,
+  *                      struct rtnl_link_stats64 *storage);
   * struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);
   *    Called when a user wants to get the network device usage
-  *    statistics. If not defined, the counters in dev->stats will
-  *    be used.
+  *    statistics. Drivers must do one of the following:
+  *    1. Define @ndo_get_stats64 to fill in a zero-initialised
+  *       rtnl_link_stats64 structure passed by the caller.
+  *    2. Define @ndo_get_stats to update a net_device_stats structure
+  *       (which should normally be dev->stats) and return a pointer to
+  *       it. The structure may be changed asynchronously only if each
+  *       field is written atomically.
+  *    3. Update dev->stats asynchronously and atomically, and define
+  *       neither operation.
   *
   * void (*ndo_vlan_rx_register)(struct net_device *dev, struct vlan_group *grp);
   *    If device support VLAN receive accleration
@@@ -718,6 -729,8 +729,8 @@@ struct net_device_ops 
                                                   struct neigh_parms *);
        void                    (*ndo_tx_timeout) (struct net_device *dev);
  
+       struct rtnl_link_stats64* (*ndo_get_stats64)(struct net_device *dev,
+                                                    struct rtnl_link_stats64 *storage);
        struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);
  
        void                    (*ndo_vlan_rx_register)(struct net_device *dev,
                                                        unsigned short vid);
  #ifdef CONFIG_NET_POLL_CONTROLLER
        void                    (*ndo_poll_controller)(struct net_device *dev);
+       int                     (*ndo_netpoll_setup)(struct net_device *dev,
+                                                    struct netpoll_info *info);
        void                    (*ndo_netpoll_cleanup)(struct net_device *dev);
  #endif
        int                     (*ndo_set_vf_mac)(struct net_device *dev,
@@@ -779,7 -794,7 +794,7 @@@ struct net_device 
         */
        char                    name[IFNAMSIZ];
  
 -      struct pm_qos_request_list *pm_qos_req;
 +      struct pm_qos_request_list pm_qos_req;
  
        /* device name hash chain */
        struct hlist_node       name_hlist;
  #define NETIF_F_FSO           (SKB_GSO_FCOE << NETIF_F_GSO_SHIFT)
  
        /* List of features with software fallbacks. */
- #define NETIF_F_GSO_SOFTWARE  (NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6)
+ #define NETIF_F_GSO_SOFTWARE  (NETIF_F_TSO | NETIF_F_TSO_ECN | \
+                                NETIF_F_TSO6 | NETIF_F_UFO)
  
  
  #define NETIF_F_GEN_CSUM      (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM)
  
        /* Interface address info. */
        unsigned char           perm_addr[MAX_ADDR_LEN]; /* permanent hw address */
+       unsigned char           addr_assign_type; /* hw address assignment type */
        unsigned char           addr_len;       /* hardware address length      */
        unsigned short          dev_id;         /* for shared network cards */
  
  #endif
  
        struct netdev_queue     rx_queue;
+       rx_handler_func_t       *rx_handler;
+       void                    *rx_handler_data;
  
        struct netdev_queue     *_tx ____cacheline_aligned_in_smp;
  
        /* mid-layer private */
        void                    *ml_priv;
  
-       /* bridge stuff */
-       struct net_bridge_port  *br_port;
-       /* macvlan */
-       struct macvlan_port     *macvlan_port;
        /* GARP */
        struct garp_port        *garp_port;
  
  #endif
        /* n-tuple filter list attached to this device */
        struct ethtool_rx_ntuple_list ethtool_ntuple_list;
+       /* phy device may attach itself for hardware timestamping */
+       struct phy_device *phydev;
  };
  #define to_net_dev(d) container_of(d, struct net_device, dev)
  
@@@ -1087,11 -1105,7 +1105,7 @@@ static inline void netdev_for_each_tx_q
  static inline
  struct net *dev_net(const struct net_device *dev)
  {
- #ifdef CONFIG_NET_NS
-       return dev->nd_net;
- #else
-       return &init_net;
- #endif
+       return read_pnet(&dev->nd_net);
  }
  
  static inline
@@@ -1272,8 -1286,8 +1286,8 @@@ extern void             dev_add_pack(struct packet
  extern void           dev_remove_pack(struct packet_type *pt);
  extern void           __dev_remove_pack(struct packet_type *pt);
  
- extern struct net_device      *dev_get_by_flags(struct net *net, unsigned short flags,
-                                                 unsigned short mask);
+ extern struct net_device      *dev_get_by_flags_rcu(struct net *net, unsigned short flags,
+                                                     unsigned short mask);
  extern struct net_device      *dev_get_by_name(struct net *net, const char *name);
  extern struct net_device      *dev_get_by_name_rcu(struct net *net, const char *name);
  extern struct net_device      *__dev_get_by_name(struct net *net, const char *name);
@@@ -1696,6 -1710,11 +1710,11 @@@ static inline void napi_free_frags(stru
        napi->skb = NULL;
  }
  
+ extern int netdev_rx_handler_register(struct net_device *dev,
+                                     rx_handler_func_t *rx_handler,
+                                     void *rx_handler_data);
+ extern void netdev_rx_handler_unregister(struct net_device *dev);
  extern void           netif_nit_deliver(struct sk_buff *skb);
  extern int            dev_valid_name(const char *name);
  extern int            dev_ioctl(struct net *net, unsigned int cmd, void __user *);
@@@ -1775,6 -1794,8 +1794,8 @@@ extern void netif_carrier_on(struct net
  
  extern void netif_carrier_off(struct net_device *dev);
  
+ extern void netif_notify_peers(struct net_device *dev);
  /**
   *    netif_dormant_on - mark device as dormant.
   *    @dev: network device
@@@ -2119,8 -2140,10 +2140,10 @@@ extern void           netdev_features_change(str
  /* Load a device via the kmod */
  extern void           dev_load(struct net *net, const char *name);
  extern void           dev_mcast_init(void);
- extern const struct net_device_stats *dev_get_stats(struct net_device *dev);
- extern void           dev_txq_stats_fold(const struct net_device *dev, struct net_device_stats *stats);
+ extern struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
+                                              struct rtnl_link_stats64 *storage);
+ extern void           dev_txq_stats_fold(const struct net_device *dev,
+                                          struct rtnl_link_stats64 *stats);
  
  extern int            netdev_max_backlog;
  extern int            netdev_tstamp_prequeue;
@@@ -2230,25 -2253,23 +2253,23 @@@ static inline const char *netdev_name(c
        return dev->name;
  }
  
- #define netdev_printk(level, netdev, format, args...)         \
-       dev_printk(level, (netdev)->dev.parent,                 \
-                  "%s: " format,                               \
-                  netdev_name(netdev), ##args)
- #define netdev_emerg(dev, format, args...)                    \
-       netdev_printk(KERN_EMERG, dev, format, ##args)
- #define netdev_alert(dev, format, args...)                    \
-       netdev_printk(KERN_ALERT, dev, format, ##args)
- #define netdev_crit(dev, format, args...)                     \
-       netdev_printk(KERN_CRIT, dev, format, ##args)
- #define netdev_err(dev, format, args...)                      \
-       netdev_printk(KERN_ERR, dev, format, ##args)
- #define netdev_warn(dev, format, args...)                     \
-       netdev_printk(KERN_WARNING, dev, format, ##args)
- #define netdev_notice(dev, format, args...)                   \
-       netdev_printk(KERN_NOTICE, dev, format, ##args)
- #define netdev_info(dev, format, args...)                     \
-       netdev_printk(KERN_INFO, dev, format, ##args)
+ extern int netdev_printk(const char *level, const struct net_device *dev,
+                        const char *format, ...)
+       __attribute__ ((format (printf, 3, 4)));
+ extern int netdev_emerg(const struct net_device *dev, const char *format, ...)
+       __attribute__ ((format (printf, 2, 3)));
+ extern int netdev_alert(const struct net_device *dev, const char *format, ...)
+       __attribute__ ((format (printf, 2, 3)));
+ extern int netdev_crit(const struct net_device *dev, const char *format, ...)
+       __attribute__ ((format (printf, 2, 3)));
+ extern int netdev_err(const struct net_device *dev, const char *format, ...)
+       __attribute__ ((format (printf, 2, 3)));
+ extern int netdev_warn(const struct net_device *dev, const char *format, ...)
+       __attribute__ ((format (printf, 2, 3)));
+ extern int netdev_notice(const struct net_device *dev, const char *format, ...)
+       __attribute__ ((format (printf, 2, 3)));
+ extern int netdev_info(const struct net_device *dev, const char *format, ...)
+       __attribute__ ((format (printf, 2, 3)));
  
  #if defined(DEBUG)
  #define netdev_dbg(__dev, format, args...)                    \
@@@ -2296,20 -2317,26 +2317,26 @@@ do {                                                         
                netdev_printk(level, (dev), fmt, ##args);       \
  } while (0)
  
+ #define netif_level(level, priv, type, dev, fmt, args...)     \
+ do {                                                          \
+       if (netif_msg_##type(priv))                             \
+               netdev_##level(dev, fmt, ##args);               \
+ } while (0)
  #define netif_emerg(priv, type, dev, fmt, args...)            \
-       netif_printk(priv, type, KERN_EMERG, dev, fmt, ##args)
+       netif_level(emerg, priv, type, dev, fmt, ##args)
  #define netif_alert(priv, type, dev, fmt, args...)            \
-       netif_printk(priv, type, KERN_ALERT, dev, fmt, ##args)
+       netif_level(alert, priv, type, dev, fmt, ##args)
  #define netif_crit(priv, type, dev, fmt, args...)             \
-       netif_printk(priv, type, KERN_CRIT, dev, fmt, ##args)
+       netif_level(crit, priv, type, dev, fmt, ##args)
  #define netif_err(priv, type, dev, fmt, args...)              \
-       netif_printk(priv, type, KERN_ERR, dev, fmt, ##args)
+       netif_level(err, priv, type, dev, fmt, ##args)
  #define netif_warn(priv, type, dev, fmt, args...)             \
-       netif_printk(priv, type, KERN_WARNING, dev, fmt, ##args)
+       netif_level(warn, priv, type, dev, fmt, ##args)
  #define netif_notice(priv, type, dev, fmt, args...)           \
-       netif_printk(priv, type, KERN_NOTICE, dev, fmt, ##args)
+       netif_level(notice, priv, type, dev, fmt, ##args)
  #define netif_info(priv, type, dev, fmt, args...)             \
-       netif_printk(priv, type, KERN_INFO, (dev), fmt, ##args)
+       netif_level(info, priv, type, dev, fmt, ##args)
  
  #if defined(DEBUG)
  #define netif_dbg(priv, type, dev, format, args...)           \
diff --combined include/linux/pci_ids.h
index 3bedcc149c843bfec71e29c2b6e319a4d052c70b,384c2a25db1f0fb849b006ecbd50d585f5b90201..e69612cace616745d1fdd0b29139832b245ab9da
  #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE       0x0759
  #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS     0x07D8
  #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS     0x0AA2
 +#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA            0x0D85
  
  #define PCI_VENDOR_ID_IMS             0x10e0
  #define PCI_DEVICE_ID_IMS_TT128               0x9128
  #define PCI_DEVICE_ID_SBE_WANXL100    0x0301
  #define PCI_DEVICE_ID_SBE_WANXL200    0x0302
  #define PCI_DEVICE_ID_SBE_WANXL400    0x0104
+ #define PCI_SUBDEVICE_ID_SBE_T3E3     0x0009
+ #define PCI_SUBDEVICE_ID_SBE_2T3E3_P0 0x0901
+ #define PCI_SUBDEVICE_ID_SBE_2T3E3_P1 0x0902
  
  #define PCI_VENDOR_ID_TOSHIBA         0x1179
  #define PCI_DEVICE_ID_TOSHIBA_PICCOLO_1       0x0101
  #define PCI_DEVICE_ID_NX2_57711E      0x1650
  #define PCI_DEVICE_ID_TIGON3_5705     0x1653
  #define PCI_DEVICE_ID_TIGON3_5705_2   0x1654
- #define PCI_DEVICE_ID_TIGON3_5720     0x1658
  #define PCI_DEVICE_ID_TIGON3_5721     0x1659
  #define PCI_DEVICE_ID_TIGON3_5722     0x165a
  #define PCI_DEVICE_ID_TIGON3_5723     0x165b
  #define PCI_DEVICE_ID_TIGON3_5754M    0x1672
  #define PCI_DEVICE_ID_TIGON3_5755M    0x1673
  #define PCI_DEVICE_ID_TIGON3_5756     0x1674
- #define PCI_DEVICE_ID_TIGON3_5750     0x1676
  #define PCI_DEVICE_ID_TIGON3_5751     0x1677
  #define PCI_DEVICE_ID_TIGON3_5715     0x1678
  #define PCI_DEVICE_ID_TIGON3_5715S    0x1679
  #define PCI_DEVICE_ID_TIGON3_5754     0x167a
  #define PCI_DEVICE_ID_TIGON3_5755     0x167b
- #define PCI_DEVICE_ID_TIGON3_5750M    0x167c
  #define PCI_DEVICE_ID_TIGON3_5751M    0x167d
  #define PCI_DEVICE_ID_TIGON3_5751F    0x167e
  #define PCI_DEVICE_ID_TIGON3_5787F    0x167f
  #define PCI_VENDOR_ID_JMICRON         0x197B
  #define PCI_DEVICE_ID_JMICRON_JMB360  0x2360
  #define PCI_DEVICE_ID_JMICRON_JMB361  0x2361
 +#define PCI_DEVICE_ID_JMICRON_JMB362  0x2362
  #define PCI_DEVICE_ID_JMICRON_JMB363  0x2363
  #define PCI_DEVICE_ID_JMICRON_JMB365  0x2365
  #define PCI_DEVICE_ID_JMICRON_JMB366  0x2366
  #define PCI_DEVICE_ID_INTEL_ICH9_6    0x2930
  #define PCI_DEVICE_ID_INTEL_ICH9_7    0x2916
  #define PCI_DEVICE_ID_INTEL_ICH9_8    0x2918
 +#define PCI_DEVICE_ID_INTEL_I7_MCR    0x2c18
 +#define PCI_DEVICE_ID_INTEL_I7_MC_TAD 0x2c19
 +#define PCI_DEVICE_ID_INTEL_I7_MC_RAS 0x2c1a
 +#define PCI_DEVICE_ID_INTEL_I7_MC_TEST        0x2c1c
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_CTRL  0x2c20
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_ADDR  0x2c21
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_RANK  0x2c22
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH0_TC    0x2c23
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_CTRL  0x2c28
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_ADDR  0x2c29
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_RANK  0x2c2a
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH1_TC    0x2c2b
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_CTRL  0x2c30
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_ADDR  0x2c31
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_RANK  0x2c32
 +#define PCI_DEVICE_ID_INTEL_I7_MC_CH2_TC    0x2c33
 +#define PCI_DEVICE_ID_INTEL_I7_NONCORE        0x2c41
 +#define PCI_DEVICE_ID_INTEL_I7_NONCORE_ALT 0x2c40
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE     0x2c50
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_ALT 0x2c51
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_NONCORE_REV2 0x2c70
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_SAD         0x2c81
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_LINK0   0x2c90
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_PHY0    0x2c91
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MCR         0x2c98
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TAD      0x2c99
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TEST     0x2c9C
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_CTRL 0x2ca0
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_ADDR 0x2ca1
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_RANK 0x2ca2
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_TC   0x2ca3
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_CTRL 0x2ca8
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_ADDR 0x2ca9
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_RANK 0x2caa
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_TC   0x2cab
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MCR_REV2          0x2d98
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TAD_REV2       0x2d99
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_RAS_REV2       0x2d9a
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TEST_REV2      0x2d9c
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_CTRL_REV2  0x2da0
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_ADDR_REV2  0x2da1
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_RANK_REV2  0x2da2
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_TC_REV2    0x2da3
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_CTRL_REV2  0x2da8
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_ADDR_REV2  0x2da9
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_RANK_REV2  0x2daa
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH1_TC_REV2    0x2dab
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_CTRL_REV2  0x2db0
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_ADDR_REV2  0x2db1
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_RANK_REV2  0x2db2
 +#define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH2_TC_REV2    0x2db3
  #define PCI_DEVICE_ID_INTEL_82855PM_HB        0x3340
  #define PCI_DEVICE_ID_INTEL_IOAT_TBG4 0x3429
  #define PCI_DEVICE_ID_INTEL_IOAT_TBG5 0x342a
  #define PCI_DEVICE_ID_INTEL_IOAT_TBG6 0x342b
  #define PCI_DEVICE_ID_INTEL_IOAT_TBG7 0x342c
 +#define PCI_DEVICE_ID_INTEL_X58_HUB_MGMT 0x342e
  #define PCI_DEVICE_ID_INTEL_IOAT_TBG0 0x3430
  #define PCI_DEVICE_ID_INTEL_IOAT_TBG1 0x3431
  #define PCI_DEVICE_ID_INTEL_IOAT_TBG2 0x3432
diff --combined kernel/cgroup.c
index 3ac6f5b0a64b7448aceac7407c04cf7109f7ef5d,37642ad9cca8e351e0deff696436701f2b62c6c0..a8ce099544049e787464c3e4261ac70625cc0653
        return retval;
  }
  
+ /**
+  * cgroup_attach_task_current_cg - attach task 'tsk' to current task's cgroup
+  * @tsk: the task to be attached
+  */
+ int cgroup_attach_task_current_cg(struct task_struct *tsk)
+ {
+       struct cgroupfs_root *root;
+       struct cgroup *cur_cg;
+       int retval = 0;
+       cgroup_lock();
+       for_each_active_root(root) {
+               cur_cg = task_cgroup_from_root(current, root);
+               retval = cgroup_attach_task(cur_cg, tsk);
+               if (retval)
+                       break;
+       }
+       cgroup_unlock();
+       return retval;
+ }
+ EXPORT_SYMBOL_GPL(cgroup_attach_task_current_cg);
  /*
   * Attach task with pid 'pid' to cgroup 'cgrp'. Call with cgroup_mutex
   * held. May take task_lock of task
@@@ -4598,7 -4621,7 +4621,7 @@@ static int alloc_css_id(struct cgroup_s
        parent_css = parent->subsys[subsys_id];
        child_css = child->subsys[subsys_id];
        parent_id = parent_css->id;
 -      depth = parent_id->depth;
 +      depth = parent_id->depth + 1;
  
        child_id = get_new_cssid(ss, depth);
        if (IS_ERR(child_id))