Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net
authorDavid S. Miller <davem@davemloft.net>
Sat, 20 Aug 2011 17:39:12 +0000 (10:39 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 20 Aug 2011 17:39:12 +0000 (10:39 -0700)
22 files changed:
1  2 
MAINTAINERS
drivers/net/bonding/bond_main.c
drivers/net/ethernet/amd/pcnet32.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
drivers/net/ethernet/freescale/gianfar.c
drivers/net/ethernet/freescale/gianfar_ethtool.c
drivers/net/ethernet/intel/e1000e/82571.c
drivers/net/ethernet/intel/e1000e/e1000.h
drivers/net/ethernet/intel/e1000e/ethtool.c
drivers/net/ethernet/intel/e1000e/ich8lan.c
drivers/net/ethernet/intel/e1000e/lib.c
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/nvidia/forcedeth.c
drivers/net/ethernet/renesas/sh_eth.c
drivers/net/ethernet/via/via-velocity.c
drivers/net/vmxnet3/vmxnet3_drv.c
net/ipv4/route.c
net/ipv6/sit.c

diff --combined MAINTAINERS
@@@ -117,20 -117,20 +117,20 @@@ Maintainers List (try to look for most 
  M:    Philip Blundell <philb@gnu.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/3c505*
 +F:    drivers/net/ethernet/i825xx/3c505*
  
  3C59X NETWORK DRIVER
  M:    Steffen Klassert <klassert@mathematik.tu-chemnitz.de>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    Documentation/networking/vortex.txt
 -F:    drivers/net/3c59x.c
 +F:    drivers/net/ethernet/3com/3c59x.c
  
  3CR990 NETWORK DRIVER
  M:    David Dillow <dave@thedillows.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/typhoon*
 +F:    drivers/net/ethernet/3com/typhoon*
  
  3WARE SAS/SATA-RAID SCSI DRIVERS (3W-XXXX, 3W-9XXX, 3W-SAS)
  M:    Adam Radford <linuxraid@lsi.com>
@@@ -156,7 -156,7 +156,7 @@@ M: Realtek linux nic maintainers <nic_s
  M:    Francois Romieu <romieu@fr.zoreil.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/r8169.c
 +F:    drivers/net/ethernet/realtek/r8169.c
  
  8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
  M:    Greg Kroah-Hartman <gregkh@suse.de>
@@@ -170,7 -170,8 +170,7 @@@ F: include/linux/serial_8250.
  8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
  L:    netdev@vger.kernel.org
  S:    Orphan / Obsolete
 -F:    drivers/net/*8390*
 -F:    drivers/net/ax88796.c
 +F:    drivers/net/ethernet/8390/
  
  9P FILE SYSTEM
  M:    Eric Van Hensbergen <ericvh@gmail.com>
@@@ -213,7 -214,7 +213,7 @@@ ACENIC DRIVE
  M:    Jes Sorensen <jes@trained-monkey.org>
  L:    linux-acenic@sunsite.dk
  S:    Maintained
 -F:    drivers/net/acenic*
 +F:    drivers/net/ethernet/alteon/acenic*
  
  ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
  M:    Peter Feuerer <peter@piie.net>
@@@ -745,7 -746,7 +745,7 @@@ L: linux-arm-kernel@lists.infradead.or
  W:    http://www.arm.linux.org.uk/
  S:    Maintained
  F:    arch/arm/mach-ebsa110/
 -F:    drivers/net/arm/am79c961a.*
 +F:    drivers/net/ethernet/amd/am79c961a.*
  
  ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
  M:    Daniel Ribeiro <drwyrm@gmail.com>
@@@ -1014,8 -1015,7 +1014,8 @@@ F:      arch/arm/include/asm/hardware/ioc.
  F:    arch/arm/include/asm/hardware/iomd.h
  F:    arch/arm/include/asm/hardware/memc.h
  F:    arch/arm/mach-rpc/
 -F:    drivers/net/arm/ether*
 +F:    drivers/net/ethernet/i825xx/ether1*
 +F:    drivers/net/ethernet/seeq/ether3*
  F:    drivers/scsi/arm/
  
  ARM/SHARK MACHINE SUPPORT
@@@ -1127,7 -1127,7 +1127,7 @@@ F:      arch/arm/mach-nuc93x
  F:    drivers/input/keyboard/w90p910_keypad.c
  F:    drivers/input/touchscreen/w90p910_ts.c
  F:    drivers/watchdog/nuc900_wdt.c
 -F:    drivers/net/arm/w90p910_ether.c
 +F:    drivers/net/ethernet/nuvoton/w90p910_ether.c
  F:    drivers/mtd/nand/nuc900_nand.c
  F:    drivers/rtc/rtc-nuc900.c
  F:    drivers/spi/spi_nuc900.c
@@@ -1283,7 -1283,7 +1283,7 @@@ L:      netdev@vger.kernel.or
  W:    http://sourceforge.net/projects/atl1
  W:    http://atl1.sourceforge.net
  S:    Maintained
 -F:    drivers/net/atlx/
 +F:    drivers/net/ethernet/atheros/
  
  ATM
  M:    Chas Williams <chas@cmf.nrl.navy.mil>
@@@ -1323,7 -1323,7 +1323,7 @@@ F:      include/video/atmel_lcdc.
  ATMEL MACB ETHERNET DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  S:    Supported
 -F:    drivers/net/macb.*
 +F:    drivers/net/ethernet/cadence/
  
  ATMEL SPI DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
@@@ -1446,7 -1446,7 +1446,7 @@@ BLACKFIN EMAC DRIVE
  L:    uclinux-dist-devel@blackfin.uclinux.org
  W:    http://blackfin.uclinux.org
  S:    Supported
 -F:    drivers/net/bfin_mac.*
 +F:    drivers/net/ethernet/adi/
  
  BLACKFIN RTC DRIVER
  M:    Mike Frysinger <vapier.adi@gmail.com>
@@@ -1527,27 -1527,27 +1527,27 @@@ BROADCOM B44 10/100 ETHERNET DRIVE
  M:    Gary Zambrano <zambrano@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/b44.*
 +F:    drivers/net/ethernet/broadcom/b44.*
  
  BROADCOM BNX2 GIGABIT ETHERNET DRIVER
  M:    Michael Chan <mchan@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/bnx2.*
 -F:    drivers/net/bnx2_*
 +F:    drivers/net/ethernet/broadcom/bnx2.*
 +F:    drivers/net/ethernet/broadcom/bnx2_*
  
  BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
  M:    Eilon Greenstein <eilong@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/bnx2x/
 +F:    drivers/net/ethernet/broadcom/bnx2x/
  
  BROADCOM TG3 GIGABIT ETHERNET DRIVER
  M:    Matt Carlson <mcarlson@broadcom.com>
  M:    Michael Chan <mchan@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/tg3.*
 +F:    drivers/net/ethernet/broadcom/tg3.*
  
  BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
  M:    Brett Rudley <brudley@broadcom.com>
@@@ -1577,7 -1577,7 +1577,7 @@@ M:      Rasesh Mody <rmody@brocade.com
  M:    Debashis Dutt <ddutt@brocade.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/bna/
 +F:    drivers/net/ethernet/brocade/bna/
  
  BSG (block layer generic sg v4 driver)
  M:    FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
@@@ -1762,13 -1762,13 +1762,13 @@@ M:   Vasanthy Kolluri <vkolluri@cisco.com
  M:    Roopa Prabhu <roprabhu@cisco.com>
  M:    David Wang <dwang2@cisco.com>
  S:    Supported
 -F:    drivers/net/enic/
 +F:    drivers/net/ethernet/cisco/enic/
  
  CIRRUS LOGIC EP93XX ETHERNET DRIVER
  M:    Hartley Sweeten <hsweeten@visionengravers.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/arm/ep93xx_eth.c
 +F:    drivers/net/ethernet/cirrus/ep93xx_eth.c
  
  CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER
  M:    Lennert Buytenhek <kernel@wantstofly.org>
@@@ -1908,7 -1908,7 +1908,7 @@@ CPMAC ETHERNET DRIVE
  M:    Florian Fainelli <florian@openwrt.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/cpmac.c
 +F:    drivers/net/ethernet/ti/cpmac.c
  
  CPU FREQUENCY DRIVERS
  M:    Dave Jones <davej@redhat.com>
@@@ -1995,7 -1995,7 +1995,7 @@@ M:      Divy Le Ray <divy@chelsio.com
  L:    netdev@vger.kernel.org
  W:    http://www.chelsio.com
  S:    Supported
 -F:    drivers/net/cxgb3/
 +F:    drivers/net/ethernet/chelsio/cxgb3/
  
  CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
  M:    Steve Wise <swise@chelsio.com>
@@@ -2009,7 -2009,7 +2009,7 @@@ M:      Dimitris Michailidis <dm@chelsio.com
  L:    netdev@vger.kernel.org
  W:    http://www.chelsio.com
  S:    Supported
 -F:    drivers/net/cxgb4/
 +F:    drivers/net/ethernet/chelsio/cxgb4/
  
  CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
  M:    Steve Wise <swise@chelsio.com>
@@@ -2023,14 -2023,14 +2023,14 @@@ M:   Casey Leedom <leedom@chelsio.com
  L:    netdev@vger.kernel.org
  W:    http://www.chelsio.com
  S:    Supported
 -F:    drivers/net/cxgb4vf/
 +F:    drivers/net/ethernet/chelsio/cxgb4vf/
  
  STMMAC ETHERNET DRIVER
  M:    Giuseppe Cavallaro <peppe.cavallaro@st.com>
  L:    netdev@vger.kernel.org
  W:    http://www.stlinux.com
  S:    Supported
 -F:    drivers/net/stmmac/
 +F:    drivers/net/ethernet/stmicro/stmmac/
  
  CYBERPRO FB DRIVER
  M:    Russell King <linux@arm.linux.org.uk>
@@@ -2074,7 -2074,7 +2074,7 @@@ DAVICOM FAST ETHERNET (DMFE) NETWORK DR
  L:    netdev@vger.kernel.org
  S:    Orphan
  F:    Documentation/networking/dmfe.txt
 -F:    drivers/net/tulip/dmfe.c
 +F:    drivers/net/ethernet/tulip/dmfe.c
  
  DC390/AM53C974 SCSI driver
  M:    Kurt Garloff <garloff@suse.de>
@@@ -2466,7 -2466,7 +2466,7 @@@ EHEA (IBM pSeries eHEA 10Gb ethernet ad
  M:    Breno Leitao <leitao@linux.vnet.ibm.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ehea/
 +F:    drivers/net/ethernet/ibm/ehea/
  
  EMBEDDED LINUX
  M:    Paul Gortmaker <paul.gortmaker@windriver.com>
@@@ -2511,7 -2511,7 +2511,7 @@@ ETHEREXPRESS-16 NETWORK DRIVE
  M:    Philip Blundell <philb@gnu.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/eexpress.*
 +F:    drivers/net/ethernet/i825xx/eexpress.*
  
  ETHERNET BRIDGE
  M:    Stephen Hemminger <shemminger@linux-foundation.org>
@@@ -2525,7 -2525,7 +2525,7 @@@ F:      net/bridge
  ETHERTEAM 16I DRIVER
  M:    Mika Kuoppala <miku@iki.fi>
  S:    Maintained
 -F:    drivers/net/eth16i.c
 +F:    drivers/net/ethernet/fujitsu/eth16i.c
  
  EXT2 FILE SYSTEM
  M:    Jan Kara <jack@suse.cz>
@@@ -2689,7 -2689,7 +2689,7 @@@ M:      Vitaly Bordug <vbordug@ru.mvista.com
  L:    linuxppc-dev@lists.ozlabs.org
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/fs_enet/
 +F:    drivers/net/ethernet/freescale/fs_enet/
  F:    include/linux/fs_enet_pd.h
  
  FREESCALE QUICC ENGINE LIBRARY
@@@ -2711,7 -2711,7 +2711,7 @@@ M:      Li Yang <leoli@freescale.com
  L:    netdev@vger.kernel.org
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
 -F:    drivers/net/ucc_geth*
 +F:    drivers/net/ethernet/freescale/ucc_geth*
  
  FREESCALE QUICC ENGINE UCC UART DRIVER
  M:    Timur Tabi <timur@freescale.com>
@@@ -3066,7 -3066,7 +3066,7 @@@ F:      drivers/platform/x86/tc1100-wmi.
  HP100:        Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
  M:    Jaroslav Kysela <perex@perex.cz>
  S:    Maintained
 -F:    drivers/net/hp100.*
 +F:    drivers/net/ethernet/hp/hp100.*
  
  HPET: High Precision Event Timers driver
  M:    Clemens Ladisch <clemens@ladisch.de>
@@@ -3164,7 -3164,7 +3164,7 @@@ IBM Power Virtual Ethernet Device Drive
  M:    Santiago Leon <santil@linux.vnet.ibm.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/ibmveth.*
 +F:    drivers/net/ethernet/ibm/ibmveth.*
  
  IBM ServeRAID RAID DRIVER
  P:    Jack Hammer
@@@ -3320,7 -3320,7 +3320,7 @@@ F:      arch/arm/mach-ixp4xx/include/mach/qm
  F:    arch/arm/mach-ixp4xx/include/mach/npe.h
  F:    arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
  F:    arch/arm/mach-ixp4xx/ixp4xx_npe.c
 -F:    drivers/net/arm/ixp4xx_eth.c
 +F:    drivers/net/ethernet/xscale/ixp4xx_eth.c
  F:    drivers/net/wan/ixp4xx_hss.c
  
  INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT
@@@ -3332,7 -3332,7 +3332,7 @@@ INTEL IXP2000 ETHERNET DRIVE
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ixp2000/
 +F:    drivers/net/ethernet/xscale/ixp2000/
  
  INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf)
  M:    Jeff Kirsher <jeffrey.t.kirsher@intel.com>
@@@ -3341,13 -3341,13 +3341,13 @@@ M:   Bruce Allan <bruce.w.allan@intel.com
  M:    Carolyn Wyborny <carolyn.wyborny@intel.com>
  M:    Don Skidmore <donald.c.skidmore@intel.com>
  M:    Greg Rose <gregory.v.rose@intel.com>
 -M:    PJ Waskiewicz <peter.p.waskiewicz.jr@intel.com>
 +M:    Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
  M:    Alex Duyck <alexander.h.duyck@intel.com>
  M:    John Ronciak <john.ronciak@intel.com>
  L:    e1000-devel@lists.sourceforge.net
  W:    http://e1000.sourceforge.net/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-2.6.git
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next.git
  S:    Supported
  F:    Documentation/networking/e100.txt
  F:    Documentation/networking/e1000.txt
@@@ -3357,7 -3357,14 +3357,7 @@@ F:     Documentation/networking/igbvf.tx
  F:    Documentation/networking/ixgb.txt
  F:    Documentation/networking/ixgbe.txt
  F:    Documentation/networking/ixgbevf.txt
 -F:    drivers/net/e100.c
 -F:    drivers/net/e1000/
 -F:    drivers/net/e1000e/
 -F:    drivers/net/igb/
 -F:    drivers/net/igbvf/
 -F:    drivers/net/ixgb/
 -F:    drivers/net/ixgbe/
 -F:    drivers/net/ixgbevf/
 +F:    drivers/net/ethernet/intel/
  
  INTEL MRST PMU DRIVER
  M:    Len Brown <len.brown@intel.com>
@@@ -3425,7 -3432,7 +3425,7 @@@ IOC3 ETHERNET DRIVE
  M:    Ralf Baechle <ralf@linux-mips.org>
  L:    linux-mips@linux-mips.org
  S:    Maintained
 -F:    drivers/net/ioc3-eth.c
 +F:    drivers/net/ethernet/sgi/ioc3-eth.c
  
  IOC3 SERIAL DRIVER
  M:    Pat Gefre <pfg@sgi.com>
@@@ -3443,7 -3450,7 +3443,7 @@@ M:      Francois Romieu <romieu@fr.zoreil.co
  M:    Sorbica Shieh <sorbica@icplus.com.tw>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ipg.*
 +F:    drivers/net/ethernet/icplus/ipg.*
  
  IPATH DRIVER
  M:    Mike Marciniszyn <infinipath@qlogic.com>
@@@ -3591,7 -3598,7 +3591,7 @@@ JME NETWORK DRIVE
  M:    Guo-Fu Tseng <cooldavid@cooldavid.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/jme.*
 +F:    drivers/net/ethernet/jme.*
  
  JOURNALLING FLASH FILE SYSTEM V2 (JFFS2)
  M:    David Woodhouse <dwmw2@infradead.org>
@@@ -3898,9 -3905,9 +3898,9 @@@ F:      arch/powerpc/platforms/powermac
  F:    drivers/macintosh/
  
  LINUX FOR POWERPC EMBEDDED MPC5XXX
- M:    Grant Likely <grant.likely@secretlab.ca>
+ M:    Anatolij Gustschin <agust@denx.de>
  L:    linuxppc-dev@lists.ozlabs.org
- T:    git git://git.secretlab.ca/git/linux-2.6.git
+ T:    git git://git.denx.de/linux-2.6-agust.git
  S:    Maintained
  F:    arch/powerpc/platforms/512x/
  F:    arch/powerpc/platforms/52xx/
@@@ -4122,7 -4129,7 +4122,7 @@@ MARVELL MV643XX ETHERNET DRIVE
  M:    Lennert Buytenhek <buytenh@wantstofly.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/mv643xx_eth.*
 +F:    drivers/net/ethernet/marvell/mv643xx_eth.*
  F:    include/linux/mv643xx.h
  
  MARVELL MWIFIEX WIRELESS DRIVER
@@@ -4336,12 -4343,12 +4336,12 @@@ M:   Andrew Gallatin <gallatin@myri.com
  L:    netdev@vger.kernel.org
  W:    http://www.myri.com/scs/download-Myri10GE.html
  S:    Supported
 -F:    drivers/net/myri10ge/
 +F:    drivers/net/ethernet/myricom/myri10ge/
  
  NATSEMI ETHERNET DRIVER (DP8381x)
  M:    Tim Hockin <thockin@hockin.org>
  S:    Maintained
 -F:    drivers/net/natsemi.c
 +F:    drivers/net/ethernet/natsemi/natsemi.c
  
  NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER
  M:    Daniel Mack <zonque@gmail.com>
@@@ -4381,8 -4388,9 +4381,8 @@@ W:      http://trac.neterion.com/cgi-bin/tra
  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/
 +F:    drivers/net/ethernet/neterion/
  
  NETFILTER/IPTABLES/IPCHAINS
  P:    Rusty Russell
@@@ -4495,12 -4503,11 +4495,12 @@@ F:   include/linux/if_
  F:    include/linux/*device.h
  
  NETXEN (1/10) GbE SUPPORT
 -M:    Amit Kumar Salecha <amit.salecha@qlogic.com>
 +M:    Sony Chacko <sony.chacko@qlogic.com>
 +M:    Rajesh Borundia <rajesh.borundia@qlogic.com>
  L:    netdev@vger.kernel.org
  W:    http://www.qlogic.com
  S:    Supported
 -F:    drivers/net/netxen/
 +F:    drivers/net/ethernet/qlogic/netxen/
  
  NFS, SUNRPC, AND LOCKD CLIENTS
  M:    Trond Myklebust <Trond.Myklebust@netapp.com>
@@@ -4521,7 -4528,7 +4521,7 @@@ M:      Jan-Pascal van Best <janpascal@vanbe
  M:    Andreas Mohr <andi@lisas.de>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ni5010.*
 +F:    drivers/net/ethernet/racal/ni5010.*
  
  NILFS2 FILESYSTEM
  M:    KONISHI Ryusuke <konishi.ryusuke@lab.ntt.co.jp>
@@@ -4787,7 -4794,7 +4787,7 @@@ PA SEMI ETHERNET DRIVE
  M:    Olof Johansson <olof@lixom.net>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/pasemi_mac.*
 +F:    drivers/net/ethernet/pasemi/*
  
  PA SEMI SMBUS DRIVER
  M:    Olof Johansson <olof@lixom.net>
@@@ -4934,7 -4941,7 +4934,7 @@@ PCNET32 NETWORK DRIVE
  M:    Don Fry <pcnet32@frontier.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/pcnet32.c
 +F:    drivers/net/ethernet/amd/pcnet32.c
  
  PCRYPT PARALLEL CRYPTO ENGINE
  M:    Steffen Klassert <steffen.klassert@secunet.com>
@@@ -5128,7 -5135,7 +5128,7 @@@ M:      Geoff Levand <geoff@infradead.org
  L:    netdev@vger.kernel.org
  L:    cbe-oss-dev@lists.ozlabs.org
  S:    Maintained
 -F:    drivers/net/ps3_gelic_net.*
 +F:    drivers/net/ethernet/toshiba/ps3_gelic_net.*
  
  PS3 PLATFORM SUPPORT
  M:    Geoff Levand <geoff@infradead.org>
@@@ -5246,24 -5253,23 +5246,24 @@@ M:   linux-driver@qlogic.co
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    Documentation/networking/LICENSE.qla3xxx
 -F:    drivers/net/qla3xxx.*
 +F:    drivers/net/ethernet/qlogic/qla3xxx.*
  
  QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
 -M:    Amit Kumar Salecha <amit.salecha@qlogic.com>
  M:    Anirban Chakraborty <anirban.chakraborty@qlogic.com>
 +M:    Sony Chacko <sony.chacko@qlogic.com>
  M:    linux-driver@qlogic.com
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/qlcnic/
 +F:    drivers/net/ethernet/qlogic/qlcnic/
  
  QLOGIC QLGE 10Gb ETHERNET DRIVER
 +M:    Anirban Chakraborty <anirban.chakraborty@qlogic.com>
  M:    Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
  M:    Ron Mercer <ron.mercer@qlogic.com>
  M:    linux-driver@qlogic.com
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/qlge/
 +F:    drivers/net/ethernet/qlogic/qlge/
  
  QNX4 FILESYSTEM
  M:    Anders Larsen <al@alarsen.net>
@@@ -5345,7 -5351,7 +5345,7 @@@ RDC R6040 FAST ETHERNET DRIVE
  M:    Florian Fainelli <florian@openwrt.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/r6040.c
 +F:    drivers/net/ethernet/rdc/r6040.c
  
  RDS - RELIABLE DATAGRAM SOCKETS
  M:    Andy Grover <andy.grover@oracle.com>
@@@ -5748,7 -5754,7 +5748,7 @@@ M:      Ajit Khaparde <ajit.khaparde@emulex.
  L:    netdev@vger.kernel.org
  W:    http://www.emulex.com
  S:    Supported
 -F:    drivers/net/benet/
 +F:    drivers/net/ethernet/emulex/benet/
  
  SFC NETWORK DRIVER
  M:    Solarflare linux maintainers <linux-net-drivers@solarflare.com>
@@@ -5756,7 -5762,7 +5756,7 @@@ M:      Steve Hodgson <shodgson@solarflare.c
  M:    Ben Hutchings <bhutchings@solarflare.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/sfc/
 +F:    drivers/net/ethernet/sfc/
  
  SGI GRU DRIVER
  M:    Jack Steiner <steiner@sgi.com>
@@@ -5822,14 -5828,14 +5822,14 @@@ SIS 190 ETHERNET DRIVE
  M:    Francois Romieu <romieu@fr.zoreil.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/sis190.c
 +F:    drivers/net/ethernet/sis/sis190.c
  
  SIS 900/7016 FAST ETHERNET DRIVER
  M:    Daniele Venzano <venza@brownhat.org>
  W:    http://www.brownhat.org/sis900.html
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/sis900.*
 +F:    drivers/net/ethernet/sis/sis900.*
  
  SIS 96X I2C/SMBUS DRIVER
  M:    "Mark M. Hoffman" <mhoffman@lightlink.com>
@@@ -5856,7 -5862,8 +5856,7 @@@ SKGE, SKY2 10/100/1000 GIGABIT ETHERNE
  M:    Stephen Hemminger <shemminger@linux-foundation.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/skge.*
 -F:    drivers/net/sky2.*
 +F:    drivers/net/ethernet/marvell/sk*
  
  SLAB ALLOCATOR
  M:    Christoph Lameter <cl@linux-foundation.org>
@@@ -5870,7 -5877,7 +5870,7 @@@ F:      mm/sl?b.
  SMC91x ETHERNET DRIVER
  M:    Nicolas Pitre <nico@fluxnic.net>
  S:    Odd Fixes
 -F:    drivers/net/smc91x.*
 +F:    drivers/net/ethernet/smsc/smc91x.*
  
  SMM665 HARDWARE MONITOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
@@@ -5905,13 -5912,13 +5905,13 @@@ M:   Steve Glendinning <steve.glendinning
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    include/linux/smsc911x.h
 -F:    drivers/net/smsc911x.*
 +F:    drivers/net/ethernet/smsc/smsc911x.*
  
  SMSC9420 PCI ETHERNET DRIVER
  M:    Steve Glendinning <steve.glendinning@smsc.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/smsc9420.*
 +F:    drivers/net/ethernet/smsc/smsc9420.*
  
  SN-IA64 (Itanium) SUB-PLATFORM
  M:    Jes Sorensen <jes@sgi.com>
@@@ -5945,7 -5952,7 +5945,7 @@@ SONIC NETWORK DRIVE
  M:    Thomas Bogendoerfer <tsbogend@alpha.franken.de>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/sonic.*
 +F:    drivers/net/ethernet/natsemi/sonic.*
  
  SONICS SILICON BACKPLANE DRIVER (SSB)
  M:    Michael Buesch <m@bues.ch>
@@@ -6086,7 -6093,7 +6086,7 @@@ M:      Jens Osterkamp <jens@de.ibm.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    Documentation/networking/spider_net.txt
 -F:    drivers/net/spider_net*
 +F:    drivers/net/ethernet/toshiba/spider_net*
  
  SPU FILE SYSTEM
  M:    Jeremy Kerr <jk@ozlabs.org>
@@@ -6264,7 -6271,7 +6264,7 @@@ F:      drivers/staging/xgifb
  STARFIRE/DURALAN NETWORK DRIVER
  M:    Ion Badulescu <ionut@badula.org>
  S:    Odd Fixes
 -F:    drivers/net/starfire*
 +F:    drivers/net/ethernet/adaptec/starfire*
  
  SUN3/3X
  M:    Sam Creasey <sammy@sammy.net>
@@@ -6273,7 -6280,6 +6273,7 @@@ S:      Maintaine
  F:    arch/m68k/kernel/*sun3*
  F:    arch/m68k/sun3*/
  F:    arch/m68k/include/asm/sun3*
 +F:    drivers/net/ethernet/i825xx/sun3*
  
  SUPERH
  M:    Paul Mundt <lethal@linux-sh.org>
@@@ -6362,7 -6368,7 +6362,7 @@@ M:      Alexander Indenbaum <baum@tehutinetw
  M:    Andy Gospodarek <andy@greyhouse.net>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/tehuti*
 +F:    drivers/net/ethernet/tehuti/*
  
  Telecom Clock Driver for MCPL0010
  M:    Mark Gross <mark.gross@intel.com>
@@@ -6413,7 -6419,7 +6413,7 @@@ W:      http://www.tilera.com/scm
  S:    Supported
  F:    arch/tile/
  F:    drivers/tty/hvc/hvc_tile.c
 -F:    drivers/net/tile/
 +F:    drivers/net/ethernet/tile/
  F:    drivers/edac/tile_edac.c
  
  TLAN NETWORK DRIVER
@@@ -6422,7 -6428,7 +6422,7 @@@ L:      tlan-devel@lists.sourceforge.net (su
  W:    http://sourceforge.net/projects/tlan/
  S:    Maintained
  F:    Documentation/networking/tlan.txt
 -F:    drivers/net/tlan.*
 +F:    drivers/net/ethernet/ti/tlan.*
  
  TOMOYO SECURITY MODULE
  M:    Kentaro Takeda <takedakn@nttdata.co.jp>
@@@ -6516,7 -6522,7 +6516,7 @@@ TULIP NETWORK DRIVER
  M:    Grant Grundler <grundler@parisc-linux.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/tulip/
 +F:    drivers/net/ethernet/tulip/
  
  TUN/TAP driver
  M:    Maxim Krasnyansky <maxk@qualcomm.com>
@@@ -6562,7 -6568,7 +6562,7 @@@ W:      http://uclinux-h8.sourceforge.jp
  S:    Supported
  F:    arch/h8300/
  F:    drivers/ide/ide-h8300.c
 -F:    drivers/net/ne-h8300.c
 +F:    drivers/net/ethernet/8390/ne-h8300.c
  
  UDF FILESYSTEM
  M:    Jan Kara <jack@suse.cz>
@@@ -6990,7 -6996,7 +6990,7 @@@ F:      include/linux/vhost.
  VIA RHINE NETWORK DRIVER
  M:    Roger Luethi <rl@hellgate.ch>
  S:    Maintained
 -F:    drivers/net/via-rhine.c
 +F:    drivers/net/ethernet/via/via-rhine.c
  
  VIAPRO SMBUS DRIVER
  M:    Jean Delvare <khali@linux-fr.org>
@@@ -7018,7 -7024,7 +7018,7 @@@ VIA VELOCITY NETWORK DRIVE
  M:    Francois Romieu <romieu@fr.zoreil.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/via-velocity.*
 +F:    drivers/net/ethernet/via/via-velocity.*
  
  VLAN (802.1Q)
  M:    Patrick McHardy <kaber@trash.net>
@@@ -7351,7 -7357,7 +7351,7 @@@ THE RES
  M:    Linus Torvalds <torvalds@linux-foundation.org>
  L:    linux-kernel@vger.kernel.org
  Q:    http://patchwork.kernel.org/project/LKML/list/
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
  S:    Buried alive in reporters
  F:    *
  F:    */
@@@ -3419,9 -3419,27 +3419,27 @@@ static int bond_xmit_hash_policy_l2(str
  static int bond_open(struct net_device *bond_dev)
  {
        struct bonding *bond = netdev_priv(bond_dev);
+       struct slave *slave;
+       int i;
  
        bond->kill_timers = 0;
  
+       /* reset slave->backup and slave->inactive */
+       read_lock(&bond->lock);
+       if (bond->slave_cnt > 0) {
+               read_lock(&bond->curr_slave_lock);
+               bond_for_each_slave(bond, slave, i) {
+                       if ((bond->params.mode == BOND_MODE_ACTIVEBACKUP)
+                               && (slave != bond->curr_active_slave)) {
+                               bond_set_slave_inactive_flags(slave);
+                       } else {
+                               bond_set_slave_active_flags(slave);
+                       }
+               }
+               read_unlock(&bond->curr_slave_lock);
+       }
+       read_unlock(&bond->lock);
        INIT_DELAYED_WORK(&bond->mcast_work, bond_resend_igmp_join_requests_delayed);
  
        if (bond_is_lb(bond)) {
@@@ -3686,27 -3704,44 +3704,27 @@@ static bool bond_addr_in_mc_list(unsign
        return false;
  }
  
 -static void bond_set_multicast_list(struct net_device *bond_dev)
 +static void bond_change_rx_flags(struct net_device *bond_dev, int change)
  {
        struct bonding *bond = netdev_priv(bond_dev);
 -      struct netdev_hw_addr *ha;
 -      bool found;
  
 -      /*
 -       * Do promisc before checking multicast_mode
 -       */
 -      if ((bond_dev->flags & IFF_PROMISC) && !(bond->flags & IFF_PROMISC))
 -              /*
 -               * FIXME: Need to handle the error when one of the multi-slaves
 -               * encounters error.
 -               */
 -              bond_set_promiscuity(bond, 1);
 -
 -
 -      if (!(bond_dev->flags & IFF_PROMISC) && (bond->flags & IFF_PROMISC))
 -              bond_set_promiscuity(bond, -1);
 -
 -
 -      /* set allmulti flag to slaves */
 -      if ((bond_dev->flags & IFF_ALLMULTI) && !(bond->flags & IFF_ALLMULTI))
 -              /*
 -               * FIXME: Need to handle the error when one of the multi-slaves
 -               * encounters error.
 -               */
 -              bond_set_allmulti(bond, 1);
 +      if (change & IFF_PROMISC)
 +              bond_set_promiscuity(bond,
 +                                   bond_dev->flags & IFF_PROMISC ? 1 : -1);
  
 +      if (change & IFF_ALLMULTI)
 +              bond_set_allmulti(bond,
 +                                bond_dev->flags & IFF_ALLMULTI ? 1 : -1);
 +}
  
 -      if (!(bond_dev->flags & IFF_ALLMULTI) && (bond->flags & IFF_ALLMULTI))
 -              bond_set_allmulti(bond, -1);
 -
 +static void bond_set_multicast_list(struct net_device *bond_dev)
 +{
 +      struct bonding *bond = netdev_priv(bond_dev);
 +      struct netdev_hw_addr *ha;
 +      bool found;
  
        read_lock(&bond->lock);
  
 -      bond->flags = bond_dev->flags;
 -
        /* looking for addresses to add to slaves' mc list */
        netdev_for_each_mc_addr(ha, bond_dev) {
                found = bond_addr_in_mc_list(ha->addr, &bond->mc_list,
@@@ -4265,8 -4300,7 +4283,8 @@@ static const struct net_device_ops bond
        .ndo_select_queue       = bond_select_queue,
        .ndo_get_stats64        = bond_get_stats,
        .ndo_do_ioctl           = bond_do_ioctl,
 -      .ndo_set_multicast_list = bond_set_multicast_list,
 +      .ndo_change_rx_flags    = bond_change_rx_flags,
 +      .ndo_set_rx_mode        = bond_set_multicast_list,
        .ndo_change_mtu         = bond_change_mtu,
        .ndo_set_mac_address    = bond_set_mac_address,
        .ndo_neigh_setup        = bond_neigh_setup,
@@@ -4812,20 -4846,11 +4830,20 @@@ static int bond_validate(struct nlattr 
        return 0;
  }
  
 +static int bond_get_tx_queues(struct net *net, struct nlattr *tb[],
 +                            unsigned int *num_queues,
 +                            unsigned int *real_num_queues)
 +{
 +      *num_queues = tx_queues;
 +      return 0;
 +}
 +
  static struct rtnl_link_ops bond_link_ops __read_mostly = {
        .kind           = "bond",
        .priv_size      = sizeof(struct bonding),
        .setup          = bond_setup,
        .validate       = bond_validate,
 +      .get_tx_queues  = bond_get_tx_queues,
  };
  
  /* Create a new bond based on the specified name and bonding parameters.
@@@ -82,7 -82,7 +82,7 @@@ static int cards_found
  /*
   * VLB I/O addresses
   */
- static unsigned int pcnet32_portlist[] __initdata =
+ static unsigned int pcnet32_portlist[] =
      { 0x300, 0x320, 0x340, 0x360, 0 };
  
  static int pcnet32_debug;
@@@ -1505,7 -1505,7 +1505,7 @@@ static const struct net_device_ops pcne
        .ndo_start_xmit         = pcnet32_start_xmit,
        .ndo_tx_timeout         = pcnet32_tx_timeout,
        .ndo_get_stats          = pcnet32_get_stats,
 -      .ndo_set_multicast_list = pcnet32_set_multicast_list,
 +      .ndo_set_rx_mode        = pcnet32_set_multicast_list,
        .ndo_do_ioctl           = pcnet32_ioctl,
        .ndo_change_mtu         = eth_change_mtu,
        .ndo_set_mac_address    = eth_mac_addr,
@@@ -15,8 -15,6 +15,8 @@@
   *
   */
  
 +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 +
  #include <linux/etherdevice.h>
  #include <linux/if_vlan.h>
  #include <linux/interrupt.h>
@@@ -65,8 -63,9 +65,9 @@@ static inline void bnx2x_bz_fp(struct b
        fp->disable_tpa = ((bp->flags & TPA_ENABLE_FLAG) == 0);
  
  #ifdef BCM_CNIC
-       /* We don't want TPA on FCoE, FWD and OOO L2 rings */
-       bnx2x_fcoe(bp, disable_tpa) = 1;
+       /* We don't want TPA on an FCoE L2 ring */
+       if (IS_FCOE_FP(fp))
+               fp->disable_tpa = 1;
  #endif
  }
  
@@@ -955,16 -954,15 +956,16 @@@ void __bnx2x_link_report(struct bnx2x *
                netdev_err(bp->dev, "NIC Link is Down\n");
                return;
        } else {
 +              const char *duplex;
 +              const char *flow;
 +
                netif_carrier_on(bp->dev);
 -              netdev_info(bp->dev, "NIC Link is Up, ");
 -              pr_cont("%d Mbps ", cur_data.line_speed);
  
                if (test_and_clear_bit(BNX2X_LINK_REPORT_FD,
                                       &cur_data.link_report_flags))
 -                      pr_cont("full duplex");
 +                      duplex = "full";
                else
 -                      pr_cont("half duplex");
 +                      duplex = "half";
  
                /* Handle the FC at the end so that only these flags would be
                 * possibly set. This way we may easily check if there is no FC
                if (cur_data.link_report_flags) {
                        if (test_bit(BNX2X_LINK_REPORT_RX_FC_ON,
                                     &cur_data.link_report_flags)) {
 -                              pr_cont(", receive ");
                                if (test_bit(BNX2X_LINK_REPORT_TX_FC_ON,
                                     &cur_data.link_report_flags))
 -                                      pr_cont("& transmit ");
 +                                      flow = "ON - receive & transmit";
 +                              else
 +                                      flow = "ON - receive";
                        } else {
 -                              pr_cont(", transmit ");
 +                              flow = "ON - transmit";
                        }
 -                      pr_cont("flow control ON");
 +              } else {
 +                      flow = "none";
                }
 -              pr_cont("\n");
 +              netdev_info(bp->dev, "NIC Link is Up, %d Mbps %s duplex, Flow control: %s\n",
 +                          cur_data.line_speed, duplex, flow);
        }
  }
  
@@@ -1410,10 -1405,9 +1411,9 @@@ void bnx2x_netif_stop(struct bnx2x *bp
  u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb)
  {
        struct bnx2x *bp = netdev_priv(dev);
  #ifdef BCM_CNIC
-       if (NO_FCOE(bp))
-               return skb_tx_hash(dev, skb);
-       else {
+       if (!NO_FCOE(bp)) {
                struct ethhdr *hdr = (struct ethhdr *)skb->data;
                u16 ether_type = ntohs(hdr->h_proto);
  
                        return bnx2x_fcoe_tx(bp, txq_index);
        }
  #endif
-       /* Select a none-FCoE queue:  if FCoE is enabled, exclude FCoE L2 ring
-        */
+       /* select a non-FCoE queue */
        return __skb_tx_hash(dev, skb, BNX2X_NUM_ETH_QUEUES(bp));
  }
  
@@@ -1454,6 -1447,28 +1453,28 @@@ void bnx2x_set_num_queues(struct bnx2x 
        bp->num_queues += NON_ETH_CONTEXT_USE;
  }
  
+ /**
+  * bnx2x_set_real_num_queues - configure netdev->real_num_[tx,rx]_queues
+  *
+  * @bp:               Driver handle
+  *
+  * We currently support for at most 16 Tx queues for each CoS thus we will
+  * allocate a multiple of 16 for ETH L2 rings according to the value of the
+  * bp->max_cos.
+  *
+  * If there is an FCoE L2 queue the appropriate Tx queue will have the next
+  * index after all ETH L2 indices.
+  *
+  * If the actual number of Tx queues (for each CoS) is less than 16 then there
+  * will be the holes at the end of each group of 16 ETh L2 indices (0..15,
+  * 16..31,...) with indicies that are not coupled with any real Tx queue.
+  *
+  * The proper configuration of skb->queue_mapping is handled by
+  * bnx2x_select_queue() and __skb_tx_hash().
+  *
+  * bnx2x_setup_tc() takes care of the proper TC mappings so that __skb_tx_hash()
+  * will return a proper Tx index if TC is enabled (netdev->num_tc > 0).
+  */
  static inline int bnx2x_set_real_num_queues(struct bnx2x *bp)
  {
        int rc, tx, rx;
@@@ -2590,7 -2605,7 +2611,7 @@@ netdev_tx_t bnx2x_start_xmit(struct sk_
  #endif
  
        /* enable this debug print to view the transmission queue being used
 -      DP(BNX2X_MSG_FP, "indices: txq %d, fp %d, txdata %d",
 +      DP(BNX2X_MSG_FP, "indices: txq %d, fp %d, txdata %d\n",
           txq_index, fp_index, txdata_index); */
  
        /* locate the fastpath and the txdata */
  
        /* enable this debug print to view the tranmission details
        DP(BNX2X_MSG_FP,"transmitting packet cid %d fp index %d txdata_index %d"
 -                      " tx_data ptr %p fp pointer %p",
 +                      " tx_data ptr %p fp pointer %p\n",
           txdata->cid, fp_index, txdata_index, txdata, fp); */
  
        if (unlikely(bnx2x_tx_avail(bp, txdata) <
@@@ -2916,14 -2931,14 +2937,14 @@@ int bnx2x_setup_tc(struct net_device *d
        /* requested to support too many traffic classes */
        if (num_tc > bp->max_cos) {
                DP(NETIF_MSG_TX_ERR, "support for too many traffic classes"
 -                                   " requested: %d. max supported is %d",
 +                                   " requested: %d. max supported is %d\n",
                                     num_tc, bp->max_cos);
                return -EINVAL;
        }
  
        /* declare amount of supported traffic classes */
        if (netdev_set_num_tc(dev, num_tc)) {
 -              DP(NETIF_MSG_TX_ERR, "failed to declare %d traffic classes",
 +              DP(NETIF_MSG_TX_ERR, "failed to declare %d traffic classes\n",
                                     num_tc);
                return -EINVAL;
        }
        /* configure priority to traffic class mapping */
        for (prio = 0; prio < BNX2X_MAX_PRIORITY; prio++) {
                netdev_set_prio_tc_map(dev, prio, bp->prio_to_cos[prio]);
 -              DP(BNX2X_MSG_SP, "mapping priority %d to tc %d",
 +              DP(BNX2X_MSG_SP, "mapping priority %d to tc %d\n",
                   prio, bp->prio_to_cos[prio]);
        }
  
           This can be used for ets or pfc, and save the effort of setting
           up a multio class queue disc or negotiating DCBX with a switch
        netdev_set_prio_tc_map(dev, 0, 0);
 -      DP(BNX2X_MSG_SP, "mapping priority %d to tc %d", 0, 0);
 +      DP(BNX2X_MSG_SP, "mapping priority %d to tc %d\n", 0, 0);
        for (prio = 1; prio < 16; prio++) {
                netdev_set_prio_tc_map(dev, prio, 1);
 -              DP(BNX2X_MSG_SP, "mapping priority %d to tc %d", prio, 1);
 +              DP(BNX2X_MSG_SP, "mapping priority %d to tc %d\n", prio, 1);
        } */
  
        /* configure traffic class to transmission queue mapping */
                count = BNX2X_NUM_ETH_QUEUES(bp);
                offset = cos * MAX_TXQS_PER_COS;
                netdev_set_tc_queue(dev, cos, count, offset);
 -              DP(BNX2X_MSG_SP, "mapping tc %d to offset %d count %d",
 +              DP(BNX2X_MSG_SP, "mapping tc %d to offset %d count %d\n",
                   cos, offset, count);
        }
  
@@@ -3039,7 -3054,7 +3060,7 @@@ static void bnx2x_free_fp_mem_at(struc
                        struct bnx2x_fp_txdata *txdata = &fp->txdata[cos];
  
                        DP(BNX2X_MSG_SP,
 -                         "freeing tx memory of fp %d cos %d cid %d",
 +                         "freeing tx memory of fp %d cos %d cid %d\n",
                           fp_index, cos, txdata->cid);
  
                        BNX2X_FREE(txdata->tx_buf_ring);
@@@ -3121,7 -3136,7 +3142,7 @@@ static int bnx2x_alloc_fp_mem_at(struc
                        struct bnx2x_fp_txdata *txdata = &fp->txdata[cos];
  
                        DP(BNX2X_MSG_SP, "allocating tx memory of "
 -                                       "fp %d cos %d",
 +                                       "fp %d cos %d\n",
                           index, cos);
  
                        BNX2X_ALLOC(txdata->tx_buf_ring,
@@@ -3371,7 -3386,7 +3392,7 @@@ int bnx2x_change_mtu(struct net_device 
        struct bnx2x *bp = netdev_priv(dev);
  
        if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
 -              printk(KERN_ERR "Handling parity error recovery. Try again later\n");
 +              pr_err("Handling parity error recovery. Try again later\n");
                return -EAGAIN;
        }
  
@@@ -3497,7 -3512,7 +3518,7 @@@ int bnx2x_resume(struct pci_dev *pdev
        bp = netdev_priv(dev);
  
        if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
 -              printk(KERN_ERR "Handling parity error recovery. Try again later\n");
 +              pr_err("Handling parity error recovery. Try again later\n");
                return -EAGAIN;
        }
  
@@@ -16,9 -16,6 +16,9 @@@
   * Written by: Dmitry Kravkov
   *
   */
 +
 +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 +
  #include <linux/netdevice.h>
  #include <linux/types.h>
  #include <linux/errno.h>
@@@ -353,7 -350,7 +353,7 @@@ static void bnx2x_dcbx_map_nw(struct bn
                if (cos_params[i].pri_bitmask & nw_prio) {
                        /* extend the bitmask with unmapped */
                        DP(NETIF_MSG_LINK,
 -                         "cos %d extended with 0x%08x", i, unmapped);
 +                         "cos %d extended with 0x%08x\n", i, unmapped);
                        cos_params[i].pri_bitmask |= unmapped;
                        break;
                }
@@@ -923,7 -920,7 +923,7 @@@ static void bnx2x_dcbx_admin_mib_update
  
  void bnx2x_dcbx_set_state(struct bnx2x *bp, bool dcb_on, u32 dcbx_enabled)
  {
-       if (!CHIP_IS_E1x(bp)) {
+       if (!CHIP_IS_E1x(bp) && !CHIP_IS_E3(bp)) {
                bp->dcb_state = dcb_on;
                bp->dcbx_enabled = dcbx_enabled;
        } else {
@@@ -15,8 -15,6 +15,8 @@@
   *
   */
  
 +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 +
  #include <linux/module.h>
  #include <linux/moduleparam.h>
  #include <linux/kernel.h>
@@@ -39,7 -37,6 +39,7 @@@
  #include <linux/time.h>
  #include <linux/ethtool.h>
  #include <linux/mii.h>
 +#include <linux/if.h>
  #include <linux/if_vlan.h>
  #include <net/ip.h>
  #include <net/ipv6.h>
@@@ -353,15 -350,17 +353,15 @@@ static void bnx2x_dp_dmae(struct bnx2x 
        default:
                if (src_type == DMAE_CMD_SRC_PCI)
                        DP(msglvl, "DMAE: opcode 0x%08x\n"
 -                         DP_LEVEL "src_addr [%x:%08x]  len [%d * 4]  "
 -                                  "dst_addr [none]\n"
 -                         DP_LEVEL "comp_addr [%x:%08x]  comp_val 0x%08x\n",
 +                         "src_addr [%x:%08x]  len [%d * 4]  dst_addr [none]\n"
 +                         "comp_addr [%x:%08x]  comp_val 0x%08x\n",
                           dmae->opcode, dmae->src_addr_hi, dmae->src_addr_lo,
                           dmae->len, dmae->comp_addr_hi, dmae->comp_addr_lo,
                           dmae->comp_val);
                else
                        DP(msglvl, "DMAE: opcode 0x%08x\n"
 -                         DP_LEVEL "src_addr [%08x]  len [%d * 4]  "
 -                                  "dst_addr [none]\n"
 -                         DP_LEVEL "comp_addr [%x:%08x]  comp_val 0x%08x\n",
 +                         "src_addr [%08x]  len [%d * 4]  dst_addr [none]\n"
 +                         "comp_addr [%x:%08x]  comp_val 0x%08x\n",
                           dmae->opcode, dmae->src_addr_lo >> 2,
                           dmae->len, dmae->comp_addr_hi, dmae->comp_addr_lo,
                           dmae->comp_val);
@@@ -790,15 -789,18 +790,15 @@@ void bnx2x_panic_dump(struct bnx2x *bp
        BNX2X_ERR("     def (");
        for (i = 0; i < HC_SP_SB_MAX_INDICES; i++)
                pr_cont("0x%x%s",
 -                     bp->def_status_blk->sp_sb.index_values[i],
 -                     (i == HC_SP_SB_MAX_INDICES - 1) ? ")  " : " ");
 +                      bp->def_status_blk->sp_sb.index_values[i],
 +                      (i == HC_SP_SB_MAX_INDICES - 1) ? ")  " : " ");
  
        for (i = 0; i < sizeof(struct hc_sp_status_block_data)/sizeof(u32); i++)
                *((u32 *)&sp_sb_data + i) = REG_RD(bp, BAR_CSTRORM_INTMEM +
                        CSTORM_SP_STATUS_BLOCK_DATA_OFFSET(func) +
                        i*sizeof(u32));
  
 -      pr_cont("igu_sb_id(0x%x)  igu_seg_id(0x%x) "
 -                       "pf_id(0x%x)  vnic_id(0x%x)  "
 -                       "vf_id(0x%x)  vf_valid (0x%x) "
 -                       "state(0x%x)\n",
 +      pr_cont("igu_sb_id(0x%x)  igu_seg_id(0x%x) pf_id(0x%x)  vnic_id(0x%x)  vf_id(0x%x)  vf_valid (0x%x) state(0x%x)\n",
               sp_sb_data.igu_sb_id,
               sp_sb_data.igu_seg_id,
               sp_sb_data.p_func.pf_id,
@@@ -3719,7 -3721,9 +3719,7 @@@ static inline void bnx2x_clear_load_cnt
  
  static inline void _print_next_block(int idx, const char *blk)
  {
 -      if (idx)
 -              pr_cont(", ");
 -      pr_cont("%s", blk);
 +      pr_cont("%s%s", idx ? ", " : "", blk);
  }
  
  static inline int bnx2x_check_blocks_with_parity0(u32 sig, int par_num,
@@@ -4384,7 -4388,7 +4384,7 @@@ static inline void bnx2x_handle_rx_mode
  static inline struct bnx2x_queue_sp_obj *bnx2x_cid_to_q_obj(
        struct bnx2x *bp, u32 cid)
  {
 -      DP(BNX2X_MSG_SP, "retrieving fp from cid %d", cid);
 +      DP(BNX2X_MSG_SP, "retrieving fp from cid %d\n", cid);
  #ifdef BCM_CNIC
        if (cid == BNX2X_FCOE_ETH_CID)
                return &bnx2x_fcoe(bp, q_obj);
@@@ -5794,6 -5798,12 +5794,12 @@@ static int bnx2x_init_hw_common(struct 
  
        DP(BNX2X_MSG_MCP, "starting common init  func %d\n", BP_ABS_FUNC(bp));
  
+       /*
+        * take the UNDI lock to protect undi_unload flow from accessing
+        * registers while we're resetting the chip
+        */
+       bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_UNDI);
        bnx2x_reset_common(bp);
        REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0xffffffff);
  
        }
        REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, val);
  
+       bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_UNDI);
        bnx2x_init_block(bp, BLOCK_MISC, PHASE_COMMON);
  
        if (!CHIP_IS_E1x(bp)) {
@@@ -7172,7 -7184,7 +7180,7 @@@ static inline void bnx2x_pf_q_prep_init
        /* set maximum number of COSs supported by this queue */
        init_params->max_cos = fp->max_cos;
  
 -      DP(BNX2X_MSG_SP, "fp: %d setting queue params max cos to: %d",
 +      DP(BNX2X_MSG_SP, "fp: %d setting queue params max cos to: %d\n",
            fp->index, init_params->max_cos);
  
        /* set the context pointers queue object */
@@@ -7205,7 -7217,7 +7213,7 @@@ int bnx2x_setup_tx_only(struct bnx2x *b
  
        DP(BNX2X_MSG_SP, "preparing to send tx-only ramrod for connection:"
                         "cos %d, primary cid %d, cid %d, "
 -                       "client id %d, sp-client id %d, flags %lx",
 +                       "client id %d, sp-client id %d, flags %lx\n",
           tx_index, q_params->q_obj->cids[FIRST_TX_COS_INDEX],
           q_params->q_obj->cids[tx_index], q_params->q_obj->cl_id,
           tx_only_params->gen_params.spcl_id, tx_only_params->flags);
@@@ -7237,7 -7249,7 +7245,7 @@@ int bnx2x_setup_queue(struct bnx2x *bp
        int rc;
        u8 tx_index;
  
 -      DP(BNX2X_MSG_SP, "setting up queue %d", fp->index);
 +      DP(BNX2X_MSG_SP, "setting up queue %d\n", fp->index);
  
        /* reset IGU state skip FCoE L2 queue */
        if (!IS_FCOE_FP(fp))
                return rc;
        }
  
 -      DP(BNX2X_MSG_SP, "init complete");
 +      DP(BNX2X_MSG_SP, "init complete\n");
  
  
        /* Now move the Queue to the SETUP state... */
@@@ -7315,7 -7327,7 +7323,7 @@@ static int bnx2x_stop_queue(struct bnx2
        struct bnx2x_queue_state_params q_params = {0};
        int rc, tx_index;
  
 -      DP(BNX2X_MSG_SP, "stopping queue %d cid %d", index, fp->cid);
 +      DP(BNX2X_MSG_SP, "stopping queue %d cid %d\n", index, fp->cid);
  
        q_params.q_obj = &fp->q_obj;
        /* We want to wait for completion in this context */
                /* ascertain this is a normal queue*/
                txdata = &fp->txdata[tx_index];
  
 -              DP(BNX2X_MSG_SP, "stopping tx-only queue %d",
 +              DP(BNX2X_MSG_SP, "stopping tx-only queue %d\n",
                                                        txdata->txq_index);
  
                /* send halt terminate on tx-only connection */
@@@ -9311,8 -9323,9 +9319,8 @@@ static void __devinit bnx2x_get_mac_hwi
                                val = MF_CFG_RD(bp, func_ext_config[func].
                                                    iscsi_mac_addr_lower);
                                bnx2x_set_mac_buf(iscsi_mac, val, val2);
 -                              BNX2X_DEV_INFO("Read iSCSI MAC: "
 -                                             BNX2X_MAC_FMT"\n",
 -                                             BNX2X_MAC_PRN_LIST(iscsi_mac));
 +                              BNX2X_DEV_INFO("Read iSCSI MAC: %pM\n",
 +                                             iscsi_mac);
                        } else
                                bp->flags |= NO_ISCSI_OOO_FLAG | NO_ISCSI_FLAG;
  
                                val = MF_CFG_RD(bp, func_ext_config[func].
                                                    fcoe_mac_addr_lower);
                                bnx2x_set_mac_buf(fip_mac, val, val2);
 -                              BNX2X_DEV_INFO("Read FCoE L2 MAC to "
 -                                             BNX2X_MAC_FMT"\n",
 -                                             BNX2X_MAC_PRN_LIST(fip_mac));
 +                              BNX2X_DEV_INFO("Read FCoE L2 MAC to %pM\n",
 +                                             fip_mac);
  
                        } else
                                bp->flags |= NO_FCOE_FLAG;
        if (!is_valid_ether_addr(bp->dev->dev_addr))
                dev_err(&bp->pdev->dev,
                        "bad Ethernet MAC address configuration: "
 -                      BNX2X_MAC_FMT", change it manually before bringing up "
 +                      "%pM, change it manually before bringing up "
                        "the appropriate network interface\n",
 -                      BNX2X_MAC_PRN_LIST(bp->dev->dev_addr));
 +                      bp->dev->dev_addr);
  }
  
  static int __devinit bnx2x_get_hwinfo(struct bnx2x *bp)
@@@ -10245,10 -10259,17 +10253,17 @@@ static int __devinit bnx2x_init_dev(str
        /* clean indirect addresses */
        pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS,
                               PCICFG_VENDOR_ID_OFFSET);
-       REG_WR(bp, PXP2_REG_PGL_ADDR_88_F0 + BP_PORT(bp)*16, 0);
-       REG_WR(bp, PXP2_REG_PGL_ADDR_8C_F0 + BP_PORT(bp)*16, 0);
-       REG_WR(bp, PXP2_REG_PGL_ADDR_90_F0 + BP_PORT(bp)*16, 0);
-       REG_WR(bp, PXP2_REG_PGL_ADDR_94_F0 + BP_PORT(bp)*16, 0);
+       /* Clean the following indirect addresses for all functions since it
+        * is not used by the driver.
+        */
+       REG_WR(bp, PXP2_REG_PGL_ADDR_88_F0, 0);
+       REG_WR(bp, PXP2_REG_PGL_ADDR_8C_F0, 0);
+       REG_WR(bp, PXP2_REG_PGL_ADDR_90_F0, 0);
+       REG_WR(bp, PXP2_REG_PGL_ADDR_94_F0, 0);
+       REG_WR(bp, PXP2_REG_PGL_ADDR_88_F1, 0);
+       REG_WR(bp, PXP2_REG_PGL_ADDR_8C_F1, 0);
+       REG_WR(bp, PXP2_REG_PGL_ADDR_90_F1, 0);
+       REG_WR(bp, PXP2_REG_PGL_ADDR_94_F1, 0);
  
        /*
         * Enable internal target-read (in case we are probed after PF FLR).
        dev->netdev_ops = &bnx2x_netdev_ops;
        bnx2x_set_ethtool_ops(dev);
  
 +      dev->priv_flags |= IFF_UNICAST_FLT;
 +
        dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
                NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 |
                NETIF_F_RXCSUM | NETIF_F_LRO | NETIF_F_HW_VLAN_TX;
@@@ -10702,7 -10721,7 +10717,7 @@@ static int __devinit bnx2x_init_one(str
                return rc;
        }
  
 -      DP(NETIF_MSG_DRV, "max_non_def_sbs %d", max_non_def_sbs);
 +      DP(NETIF_MSG_DRV, "max_non_def_sbs %d\n", max_non_def_sbs);
  
        rc = bnx2x_init_bp(bp);
        if (rc)
  
        bnx2x_get_pcie_width_speed(bp, &pcie_width, &pcie_speed);
  
 -      netdev_info(dev, "%s (%c%d) PCI-E x%d %s found at mem %lx,"
 -             " IRQ %d, ", board_info[ent->driver_data].name,
 -             (CHIP_REV(bp) >> 12) + 'A', (CHIP_METAL(bp) >> 4),
 -             pcie_width,
 -             ((!CHIP_IS_E2(bp) && pcie_speed == 2) ||
 -               (CHIP_IS_E2(bp) && pcie_speed == 1)) ?
 -                                              "5GHz (Gen2)" : "2.5GHz",
 -             dev->base_addr, bp->pdev->irq);
 -      pr_cont("node addr %pM\n", dev->dev_addr);
 +      netdev_info(dev, "%s (%c%d) PCI-E x%d %s found at mem %lx, IRQ %d, node addr %pM\n",
 +                  board_info[ent->driver_data].name,
 +                  (CHIP_REV(bp) >> 12) + 'A', (CHIP_METAL(bp) >> 4),
 +                  pcie_width,
 +                  ((!CHIP_IS_E2(bp) && pcie_speed == 2) ||
 +                   (CHIP_IS_E2(bp) && pcie_speed == 1)) ?
 +                  "5GHz (Gen2)" : "2.5GHz",
 +                  dev->base_addr, bp->pdev->irq, dev->dev_addr);
  
        return 0;
  
  /* [R 6] Debug only: Number of used entries in the data FIFO */
  #define PXP2_REG_HST_DATA_FIFO_STATUS                          0x12047c
  /* [R 7] Debug only: Number of used entries in the header FIFO */
- #define PXP2_REG_HST_HEADER_FIFO_STATUS                        0x120478
- #define PXP2_REG_PGL_ADDR_88_F0                                0x120534
- #define PXP2_REG_PGL_ADDR_8C_F0                                0x120538
- #define PXP2_REG_PGL_ADDR_90_F0                                0x12053c
- #define PXP2_REG_PGL_ADDR_94_F0                                0x120540
+ #define PXP2_REG_HST_HEADER_FIFO_STATUS                                0x120478
+ #define PXP2_REG_PGL_ADDR_88_F0                                        0x120534
+ /* [R 32] GRC address for configuration access to PCIE config address 0x88.
+  * any write to this PCIE address will cause a GRC write access to the
+  * address that's in t this register */
+ #define PXP2_REG_PGL_ADDR_88_F1                                        0x120544
+ #define PXP2_REG_PGL_ADDR_8C_F0                                        0x120538
+ /* [R 32] GRC address for configuration access to PCIE config address 0x8c.
+  * any write to this PCIE address will cause a GRC write access to the
+  * address that's in t this register */
+ #define PXP2_REG_PGL_ADDR_8C_F1                                        0x120548
+ #define PXP2_REG_PGL_ADDR_90_F0                                        0x12053c
+ /* [R 32] GRC address for configuration access to PCIE config address 0x90.
+  * any write to this PCIE address will cause a GRC write access to the
+  * address that's in t this register */
+ #define PXP2_REG_PGL_ADDR_90_F1                                        0x12054c
+ #define PXP2_REG_PGL_ADDR_94_F0                                        0x120540
+ /* [R 32] GRC address for configuration access to PCIE config address 0x94.
+  * any write to this PCIE address will cause a GRC write access to the
+  * address that's in t this register */
+ #define PXP2_REG_PGL_ADDR_94_F1                                        0x120550
  #define PXP2_REG_PGL_CONTROL0                                  0x120490
  #define PXP2_REG_PGL_CONTROL1                                  0x120514
  #define PXP2_REG_PGL_DEBUG                                     0x120520
@@@ -458,7 -458,7 +458,7 @@@ static const struct net_device_ops gfar
        .ndo_stop = gfar_close,
        .ndo_change_mtu = gfar_change_mtu,
        .ndo_set_features = gfar_set_features,
 -      .ndo_set_multicast_list = gfar_set_multi,
 +      .ndo_set_rx_mode = gfar_set_multi,
        .ndo_tx_timeout = gfar_timeout,
        .ndo_do_ioctl = gfar_ioctl,
        .ndo_get_stats = gfar_get_stats,
@@@ -2710,8 -2710,13 +2710,13 @@@ static int gfar_process_frame(struct ne
        /* Tell the skb what kind of packet this is */
        skb->protocol = eth_type_trans(skb, dev);
  
-       /* Set vlan tag */
-       if (fcb->flags & RXFCB_VLN)
+       /*
+        * There's need to check for NETIF_F_HW_VLAN_RX here.
+        * Even if vlan rx accel is disabled, on some chips
+        * RXFCB_VLN is pseudo randomly set.
+        */
+       if (dev->features & NETIF_F_HW_VLAN_RX &&
+           fcb->flags & RXFCB_VLN)
                __vlan_hwaccel_put_tag(skb, fcb->vlctl);
  
        /* Send the packet up the stack */
@@@ -686,10 -686,21 +686,21 @@@ static int gfar_ethflow_to_filer_table(
  {
        unsigned int last_rule_idx = priv->cur_filer_idx;
        unsigned int cmp_rqfpr;
-       unsigned int local_rqfpr[MAX_FILER_IDX + 1];
-       unsigned int local_rqfcr[MAX_FILER_IDX + 1];
+       unsigned int *local_rqfpr;
+       unsigned int *local_rqfcr;
        int i = 0x0, k = 0x0;
        int j = MAX_FILER_IDX, l = 0x0;
+       int ret = 1;
+       local_rqfpr = kmalloc(sizeof(unsigned int) * (MAX_FILER_IDX + 1),
+               GFP_KERNEL);
+       local_rqfcr = kmalloc(sizeof(unsigned int) * (MAX_FILER_IDX + 1),
+               GFP_KERNEL);
+       if (!local_rqfpr || !local_rqfcr) {
+               pr_err("Out of memory\n");
+               ret = 0;
+               goto err;
+       }
  
        switch (class) {
        case TCP_V4_FLOW:
                break;
        default:
                pr_err("Right now this class is not supported\n");
-               return 0;
+               ret = 0;
+               goto err;
        }
  
        for (i = 0; i < MAX_FILER_IDX + 1; i++) {
  
        if (i == MAX_FILER_IDX + 1) {
                pr_err("No parse rule found, can't create hash rules\n");
-               return 0;
+               ret = 0;
+               goto err;
        }
  
        /* If a match was found, then it begins the starting of a cluster rule
                priv->cur_filer_idx = priv->cur_filer_idx - 1;
        }
  
-       return 1;
+ err:
+       kfree(local_rqfcr);
+       kfree(local_rqfpr);
+       return ret;
  }
  
  static int gfar_set_hash_opts(struct gfar_private *priv, struct ethtool_rxnfc *cmd)
@@@ -2085,7 -2085,8 +2085,8 @@@ struct e1000_info e1000_82574_info = 
                                  | FLAG_HAS_AMT
                                  | FLAG_HAS_CTRLEXT_ON_LOAD,
        .flags2                   = FLAG2_CHECK_PHY_HANG
-                                 | FLAG2_DISABLE_ASPM_L0S,
+                                 | FLAG2_DISABLE_ASPM_L0S
+                                 | FLAG2_NO_DISABLE_RX,
        .pba                    = 32,
        .max_hw_frame_size      = DEFAULT_JUMBO,
        .get_variants           = e1000_get_variants_82571,
@@@ -2104,7 -2105,8 +2105,8 @@@ struct e1000_info e1000_82583_info = 
                                  | FLAG_HAS_AMT
                                  | FLAG_HAS_JUMBO_FRAMES
                                  | FLAG_HAS_CTRLEXT_ON_LOAD,
-       .flags2                 = FLAG2_DISABLE_ASPM_L0S,
+       .flags2                 = FLAG2_DISABLE_ASPM_L0S
+                                 | FLAG2_NO_DISABLE_RX,
        .pba                    = 32,
        .max_hw_frame_size      = DEFAULT_JUMBO,
        .get_variants           = e1000_get_variants_82571,
@@@ -155,6 -155,9 +155,9 @@@ struct e1000_info
  #define HV_M_STATUS_SPEED_1000            0x0200
  #define HV_M_STATUS_LINK_UP               0x0040
  
+ #define E1000_ICH_FWSM_PCIM2PCI               0x01000000 /* ME PCIm-to-PCI active */
+ #define E1000_ICH_FWSM_PCIM2PCI_COUNT 2000
  /* Time to wait before putting the device into D3 if there's no link (in ms). */
  #define LINK_TIMEOUT          100
  
@@@ -453,6 -456,8 +456,8 @@@ struct e1000_info 
  #define FLAG2_DISABLE_ASPM_L0S            (1 << 7)
  #define FLAG2_DISABLE_AIM                 (1 << 8)
  #define FLAG2_CHECK_PHY_HANG              (1 << 9)
+ #define FLAG2_NO_DISABLE_RX               (1 << 10)
+ #define FLAG2_PCIM2PCI_ARBITER_WA         (1 << 11)
  
  #define E1000_RX_DESC_PS(R, i)            \
        (&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))
@@@ -1206,7 -1206,8 +1206,8 @@@ static int e1000_setup_desc_rings(struc
        rx_ring->next_to_clean = 0;
  
        rctl = er32(RCTL);
-       ew32(RCTL, rctl & ~E1000_RCTL_EN);
+       if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX))
+               ew32(RCTL, rctl & ~E1000_RCTL_EN);
        ew32(RDBAL, ((u64) rx_ring->dma & 0xFFFFFFFF));
        ew32(RDBAH, ((u64) rx_ring->dma >> 32));
        ew32(RDLEN, rx_ring->size);
  #define HV_PM_CTRL            PHY_REG(770, 17)
  
  /* PHY Low Power Idle Control */
- #define I82579_LPI_CTRL                       PHY_REG(772, 20)
- #define I82579_LPI_CTRL_ENABLE_MASK   0x6000
+ #define I82579_LPI_CTRL                               PHY_REG(772, 20)
+ #define I82579_LPI_CTRL_ENABLE_MASK           0x6000
+ #define I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT  0x80
  
  /* EMI Registers */
  #define I82579_EMI_ADDR         0x10
  #define HV_KMRN_MODE_CTRL      PHY_REG(769, 16)
  #define HV_KMRN_MDIO_SLOW      0x0400
  
+ /* KMRN FIFO Control and Status */
+ #define HV_KMRN_FIFO_CTRLSTA                  PHY_REG(770, 16)
+ #define HV_KMRN_FIFO_CTRLSTA_PREAMBLE_MASK    0x7000
+ #define HV_KMRN_FIFO_CTRLSTA_PREAMBLE_SHIFT   12
  /* ICH GbE Flash Hardware Sequencing Flash Status Register bit breakdown */
  /* Offset 04h HSFSTS */
  union ich8_hws_flash_status {
@@@ -657,6 -663,7 +663,7 @@@ static s32 e1000_check_for_copper_link_
        struct e1000_mac_info *mac = &hw->mac;
        s32 ret_val;
        bool link;
+       u16 phy_reg;
  
        /*
         * We only want to go out to the PHY registers to see if Auto-Neg
  
        mac->get_link_status = false;
  
-       if (hw->phy.type == e1000_phy_82578) {
-               ret_val = e1000_link_stall_workaround_hv(hw);
-               if (ret_val)
-                       goto out;
-       }
-       if (hw->mac.type == e1000_pch2lan) {
+       switch (hw->mac.type) {
+       case e1000_pch2lan:
                ret_val = e1000_k1_workaround_lv(hw);
                if (ret_val)
                        goto out;
+               /* fall-thru */
+       case e1000_pchlan:
+               if (hw->phy.type == e1000_phy_82578) {
+                       ret_val = e1000_link_stall_workaround_hv(hw);
+                       if (ret_val)
+                               goto out;
+               }
+               /*
+                * Workaround for PCHx parts in half-duplex:
+                * Set the number of preambles removed from the packet
+                * when it is passed from the PHY to the MAC to prevent
+                * the MAC from misinterpreting the packet type.
+                */
+               e1e_rphy(hw, HV_KMRN_FIFO_CTRLSTA, &phy_reg);
+               phy_reg &= ~HV_KMRN_FIFO_CTRLSTA_PREAMBLE_MASK;
+               if ((er32(STATUS) & E1000_STATUS_FD) != E1000_STATUS_FD)
+                       phy_reg |= (1 << HV_KMRN_FIFO_CTRLSTA_PREAMBLE_SHIFT);
+               e1e_wphy(hw, HV_KMRN_FIFO_CTRLSTA, phy_reg);
+               break;
+       default:
+               break;
        }
  
        /*
@@@ -788,6 -814,11 +814,11 @@@ static s32 e1000_get_variants_ich8lan(s
            (adapter->hw.phy.type == e1000_phy_igp_3))
                adapter->flags |= FLAG_LSC_GIG_SPEED_DROP;
  
+       /* Enable workaround for 82579 w/ ME enabled */
+       if ((adapter->hw.mac.type == e1000_pch2lan) &&
+           (er32(FWSM) & E1000_ICH_FWSM_FW_VALID))
+               adapter->flags2 |= FLAG2_PCIM2PCI_ARBITER_WA;
        /* Disable EEE by default until IEEE802.3az spec is finalized */
        if (adapter->flags2 & FLAG2_HAS_EEE)
                adapter->hw.dev_spec.ich8lan.eee_disable = true;
@@@ -1355,7 -1386,7 +1386,7 @@@ static s32 e1000_hv_phy_workarounds_ich
                        return ret_val;
  
                /* Preamble tuning for SSC */
-               ret_val = e1e_wphy(hw, PHY_REG(770, 16), 0xA204);
+               ret_val = e1e_wphy(hw, HV_KMRN_FIFO_CTRLSTA, 0xA204);
                if (ret_val)
                        return ret_val;
        }
@@@ -1645,6 -1676,7 +1676,7 @@@ static s32 e1000_k1_workaround_lv(struc
        s32 ret_val = 0;
        u16 status_reg = 0;
        u32 mac_reg;
+       u16 phy_reg;
  
        if (hw->mac.type != e1000_pch2lan)
                goto out;
                mac_reg = er32(FEXTNVM4);
                mac_reg &= ~E1000_FEXTNVM4_BEACON_DURATION_MASK;
  
-               if (status_reg & HV_M_STATUS_SPEED_1000)
+               ret_val = e1e_rphy(hw, I82579_LPI_CTRL, &phy_reg);
+               if (ret_val)
+                       goto out;
+               if (status_reg & HV_M_STATUS_SPEED_1000) {
                        mac_reg |= E1000_FEXTNVM4_BEACON_DURATION_8USEC;
-               else
+                       phy_reg &= ~I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT;
+               } else {
                        mac_reg |= E1000_FEXTNVM4_BEACON_DURATION_16USEC;
+                       phy_reg |= I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT;
+               }
                ew32(FEXTNVM4, mac_reg);
+               ret_val = e1e_wphy(hw, I82579_LPI_CTRL, phy_reg);
        }
  
  out:
@@@ -190,7 -190,8 +190,8 @@@ s32 e1000_check_alt_mac_addr_generic(st
        /* Check for LOM (vs. NIC) or one of two valid mezzanine cards */
        if (!((nvm_data & NVM_COMPAT_LOM) ||
              (hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_DUAL) ||
-             (hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_QUAD)))
+             (hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_QUAD) ||
+             (hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES)))
                goto out;
  
        ret_val = e1000_read_nvm(hw, NVM_ALT_MAC_ADDR_PTR, 1,
                goto out;
        }
  
-       if (nvm_alt_mac_addr_offset == 0xFFFF) {
+       if ((nvm_alt_mac_addr_offset == 0xFFFF) ||
+           (nvm_alt_mac_addr_offset == 0x0000))
                /* There is no Alternate MAC Address */
                goto out;
-       }
  
        if (hw->bus.func == E1000_FUNC_1)
                nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN1;
@@@ -56,7 -56,7 +56,7 @@@
  
  #define DRV_EXTRAVERSION "-k"
  
- #define DRV_VERSION "1.3.16" DRV_EXTRAVERSION
+ #define DRV_VERSION "1.4.4" DRV_EXTRAVERSION
  char e1000e_driver_name[] = "e1000e";
  const char e1000e_driver_version[] = DRV_VERSION;
  
@@@ -518,6 -518,63 +518,63 @@@ static void e1000_rx_checksum(struct e1
        adapter->hw_csum_good++;
  }
  
+ /**
+  * e1000e_update_tail_wa - helper function for e1000e_update_[rt]dt_wa()
+  * @hw: pointer to the HW structure
+  * @tail: address of tail descriptor register
+  * @i: value to write to tail descriptor register
+  *
+  * When updating the tail register, the ME could be accessing Host CSR
+  * registers at the same time.  Normally, this is handled in h/w by an
+  * arbiter but on some parts there is a bug that acknowledges Host accesses
+  * later than it should which could result in the descriptor register to
+  * have an incorrect value.  Workaround this by checking the FWSM register
+  * which has bit 24 set while ME is accessing Host CSR registers, wait
+  * if it is set and try again a number of times.
+  **/
+ static inline s32 e1000e_update_tail_wa(struct e1000_hw *hw, u8 __iomem * tail,
+                                       unsigned int i)
+ {
+       unsigned int j = 0;
+       while ((j++ < E1000_ICH_FWSM_PCIM2PCI_COUNT) &&
+              (er32(FWSM) & E1000_ICH_FWSM_PCIM2PCI))
+               udelay(50);
+       writel(i, tail);
+       if ((j == E1000_ICH_FWSM_PCIM2PCI_COUNT) && (i != readl(tail)))
+               return E1000_ERR_SWFW_SYNC;
+       return 0;
+ }
+ static void e1000e_update_rdt_wa(struct e1000_adapter *adapter, unsigned int i)
+ {
+       u8 __iomem *tail = (adapter->hw.hw_addr + adapter->rx_ring->tail);
+       struct e1000_hw *hw = &adapter->hw;
+       if (e1000e_update_tail_wa(hw, tail, i)) {
+               u32 rctl = er32(RCTL);
+               ew32(RCTL, rctl & ~E1000_RCTL_EN);
+               e_err("ME firmware caused invalid RDT - resetting\n");
+               schedule_work(&adapter->reset_task);
+       }
+ }
+ static void e1000e_update_tdt_wa(struct e1000_adapter *adapter, unsigned int i)
+ {
+       u8 __iomem *tail = (adapter->hw.hw_addr + adapter->tx_ring->tail);
+       struct e1000_hw *hw = &adapter->hw;
+       if (e1000e_update_tail_wa(hw, tail, i)) {
+               u32 tctl = er32(TCTL);
+               ew32(TCTL, tctl & ~E1000_TCTL_EN);
+               e_err("ME firmware caused invalid TDT - resetting\n");
+               schedule_work(&adapter->reset_task);
+       }
+ }
  /**
   * e1000_alloc_rx_buffers - Replace used receive buffers; legacy & extended
   * @adapter: address of board private structure
@@@ -573,7 -630,10 +630,10 @@@ map_skb
                         * such as IA-64).
                         */
                        wmb();
-                       writel(i, adapter->hw.hw_addr + rx_ring->tail);
+                       if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA)
+                               e1000e_update_rdt_wa(adapter, i);
+                       else
+                               writel(i, adapter->hw.hw_addr + rx_ring->tail);
                }
                i++;
                if (i == rx_ring->count)
@@@ -673,7 -733,11 +733,11 @@@ static void e1000_alloc_rx_buffers_ps(s
                         * such as IA-64).
                         */
                        wmb();
-                       writel(i << 1, adapter->hw.hw_addr + rx_ring->tail);
+                       if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA)
+                               e1000e_update_rdt_wa(adapter, i << 1);
+                       else
+                               writel(i << 1,
+                                      adapter->hw.hw_addr + rx_ring->tail);
                }
  
                i++;
@@@ -756,7 -820,10 +820,10 @@@ check_page
                 * applicable for weak-ordered memory model archs,
                 * such as IA-64). */
                wmb();
-               writel(i, adapter->hw.hw_addr + rx_ring->tail);
+               if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA)
+                       e1000e_update_rdt_wa(adapter, i);
+               else
+                       writel(i, adapter->hw.hw_addr + rx_ring->tail);
        }
  }
  
@@@ -2915,7 -2982,8 +2982,8 @@@ static void e1000_configure_rx(struct e
  
        /* disable receives while setting up the descriptors */
        rctl = er32(RCTL);
-       ew32(RCTL, rctl & ~E1000_RCTL_EN);
+       if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX))
+               ew32(RCTL, rctl & ~E1000_RCTL_EN);
        e1e_flush();
        usleep_range(10000, 20000);
  
@@@ -3394,7 -3462,8 +3462,8 @@@ void e1000e_down(struct e1000_adapter *
  
        /* disable receives in the hardware */
        rctl = er32(RCTL);
-       ew32(RCTL, rctl & ~E1000_RCTL_EN);
+       if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX))
+               ew32(RCTL, rctl & ~E1000_RCTL_EN);
        /* flush and sleep below */
  
        netif_stop_queue(netdev);
        tctl = er32(TCTL);
        tctl &= ~E1000_TCTL_EN;
        ew32(TCTL, tctl);
        /* flush both disables and wait for them to finish */
        e1e_flush();
        usleep_range(10000, 20000);
@@@ -4686,7 -4756,12 +4756,12 @@@ static void e1000_tx_queue(struct e1000
        wmb();
  
        tx_ring->next_to_use = i;
-       writel(i, adapter->hw.hw_addr + tx_ring->tail);
+       if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA)
+               e1000e_update_tdt_wa(adapter, i);
+       else
+               writel(i, adapter->hw.hw_addr + tx_ring->tail);
        /*
         * we need this if more than one processor can write to our tail
         * at a time, it synchronizes IO on IA64/Altix systems
@@@ -5761,7 -5836,7 +5836,7 @@@ static const struct net_device_ops e100
        .ndo_stop               = e1000_close,
        .ndo_start_xmit         = e1000_xmit_frame,
        .ndo_get_stats64        = e1000e_get_stats64,
 -      .ndo_set_multicast_list = e1000_set_multi,
 +      .ndo_set_rx_mode        = e1000_set_multi,
        .ndo_set_mac_address    = e1000_set_mac,
        .ndo_change_mtu         = e1000_change_mtu,
        .ndo_do_ioctl           = e1000_ioctl,
@@@ -42,7 -42,6 +42,7 @@@
  #include <net/checksum.h>
  #include <net/ip6_checksum.h>
  #include <linux/ethtool.h>
 +#include <linux/if.h>
  #include <linux/if_vlan.h>
  #include <linux/prefetch.h>
  #include <scsi/fc/fc_fcoe.h>
@@@ -1460,8 -1459,10 +1460,10 @@@ static void ixgbe_clean_rx_irq(struct i
                if (ixgbe_rx_is_fcoe(adapter, rx_desc)) {
                        ddp_bytes = ixgbe_fcoe_ddp(adapter, rx_desc, skb,
                                                   staterr);
-                       if (!ddp_bytes)
+                       if (!ddp_bytes) {
+                               dev_kfree_skb_any(skb);
                                goto next_desc;
+                       }
                }
  #endif /* IXGBE_FCOE */
                ixgbe_receive_skb(q_vector, skb, staterr, rx_ring, rx_desc);
@@@ -7205,6 -7206,7 +7207,6 @@@ static const struct net_device_ops ixgb
        .ndo_start_xmit         = ixgbe_xmit_frame,
        .ndo_select_queue       = ixgbe_select_queue,
        .ndo_set_rx_mode        = ixgbe_set_rx_mode,
 -      .ndo_set_multicast_list = ixgbe_set_rx_mode,
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_set_mac_address    = ixgbe_set_mac,
        .ndo_change_mtu         = ixgbe_change_mtu,
@@@ -7527,8 -7529,6 +7529,8 @@@ static int __devinit ixgbe_probe(struc
        netdev->vlan_features |= NETIF_F_IPV6_CSUM;
        netdev->vlan_features |= NETIF_F_SG;
  
 +      netdev->priv_flags |= IFF_UNICAST_FLT;
 +
        if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
                adapter->flags &= ~(IXGBE_FLAG_RSS_ENABLED |
                                    IXGBE_FLAG_DCB_ENABLED);
@@@ -5208,7 -5208,7 +5208,7 @@@ static const struct net_device_ops nv_n
        .ndo_set_features       = nv_set_features,
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_set_mac_address    = nv_set_mac_address,
 -      .ndo_set_multicast_list = nv_set_multicast,
 +      .ndo_set_rx_mode        = nv_set_multicast,
  #ifdef CONFIG_NET_POLL_CONTROLLER
        .ndo_poll_controller    = nv_poll_controller,
  #endif
@@@ -5225,7 -5225,7 +5225,7 @@@ static const struct net_device_ops nv_n
        .ndo_set_features       = nv_set_features,
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_set_mac_address    = nv_set_mac_address,
 -      .ndo_set_multicast_list = nv_set_multicast,
 +      .ndo_set_rx_mode        = nv_set_multicast,
  #ifdef CONFIG_NET_POLL_CONTROLLER
        .ndo_poll_controller    = nv_poll_controller,
  #endif
@@@ -5615,7 -5615,8 +5615,8 @@@ static int __devinit nv_probe(struct pc
                goto out_error;
        }
  
-       nv_vlan_mode(dev, dev->features);
+       if (id->driver_data & DEV_HAS_VLAN)
+               nv_vlan_mode(dev, dev->features);
  
        netif_carrier_off(dev);
  
@@@ -21,6 -21,7 +21,7 @@@
   */
  
  #include <linux/init.h>
+ #include <linux/interrupt.h>
  #include <linux/dma-mapping.h>
  #include <linux/etherdevice.h>
  #include <linux/delay.h>
@@@ -1758,7 -1759,7 +1759,7 @@@ static const struct net_device_ops sh_e
        .ndo_start_xmit         = sh_eth_start_xmit,
        .ndo_get_stats          = sh_eth_get_stats,
  #if defined(SH_ETH_HAS_TSU)
 -      .ndo_set_multicast_list = sh_eth_set_multicast_list,
 +      .ndo_set_rx_mode        = sh_eth_set_multicast_list,
  #endif
        .ndo_tx_timeout         = sh_eth_tx_timeout,
        .ndo_do_ioctl           = sh_eth_do_ioctl,
@@@ -42,6 -42,7 +42,6 @@@
   *
   */
  
 -
  #include <linux/module.h>
  #include <linux/types.h>
  #include <linux/bitops.h>
@@@ -111,6 -112,7 +111,6 @@@ static void mac_get_cam_mask(struct mac
        BYTE_REG_BITS_SET(CAMCR_PS_MAR, CAMCR_PS1 | CAMCR_PS0, &regs->CAMCR);
  }
  
 -
  /**
   *    mac_set_cam_mask        -       Set a CAM mask
   *    @regs: register block for this velocity
@@@ -513,10 -515,6 +513,6 @@@ static void velocity_init_cam_filter(st
        mac_set_cam_mask(regs, vptr->mCAMmask);
  
        /* Enable VCAMs */
-       if (test_bit(0, vptr->active_vlans))
-               WORD_REG_BITS_ON(MCFG_RTGOPT, &regs->MCFG);
        for_each_set_bit(vid, vptr->active_vlans, VLAN_N_VID) {
                mac_set_vlan_cam(regs, i, (u8 *) &vid);
                vptr->vCAMmask[i / 8] |= 0x1 << (i % 8);
@@@ -698,6 -696,7 +694,6 @@@ static int velocity_mii_read(struct mac
        return 0;
  }
  
 -
  /**
   *    mii_check_media_mode    -       check media state
   *    @regs: velocity registers
@@@ -863,6 -862,8 +859,6 @@@ static u32 check_connection_type(struc
        return status;
  }
  
 -
 -
  /**
   *    velocity_set_media_mode         -       set media mode
   *    @mii_status: old MII link state
@@@ -1257,7 -1258,6 +1253,7 @@@ static void setup_queue_timers(struct v
                writeb(rxqueue_timer, &vptr->mac_regs->RQETMR);
        }
  }
 +
  /**
   * setup_adaptive_interrupts  -  Setup interrupt suppression
   *
@@@ -1597,6 -1597,8 +1593,6 @@@ static void velocity_free_rd_ring(struc
        vptr->rx.info = NULL;
  }
  
 -
 -
  /**
   *    velocity_init_rd_ring   -       set up receive ring
   *    @vptr: velocity to configure
@@@ -1670,6 -1672,7 +1666,6 @@@ static void velocity_free_dma_rings(str
        pci_free_consistent(vptr->pdev, size, vptr->rx.ring, vptr->rx.pool_dma);
  }
  
 -
  static int velocity_init_rings(struct velocity_info *vptr, int mtu)
  {
        int ret;
@@@ -1732,6 -1735,7 +1728,6 @@@ static void velocity_free_tx_buf(struc
        tdinfo->skb = NULL;
  }
  
 -
  /*
   *    FIXME: could we merge this with velocity_free_tx_buf ?
   */
@@@ -1779,6 -1783,7 +1775,6 @@@ static void velocity_free_td_ring(struc
        }
  }
  
 -
  static void velocity_free_rings(struct velocity_info *vptr)
  {
        velocity_free_td_ring(vptr);
@@@ -2016,6 -2021,7 +2012,6 @@@ static inline void velocity_iph_realign
        }
  }
  
 -
  /**
   *    velocity_receive_frame  -       received packet processor
   *    @vptr: velocity we are handling
@@@ -2082,11 -2088,11 +2078,11 @@@ static int velocity_receive_frame(struc
        netif_rx(skb);
  
        stats->rx_bytes += pkt_len;
 +      stats->rx_packets++;
  
        return 0;
  }
  
 -
  /**
   *    velocity_rx_srv         -       service RX interrupt
   *    @vptr: velocity
@@@ -2394,6 -2400,7 +2390,6 @@@ static int velocity_mii_ioctl(struct ne
        return 0;
  }
  
 -
  /**
   *    velocity_ioctl          -       ioctl entry point
   *    @dev: network device
        return NETDEV_TX_OK;
  }
  
 -
  static const struct net_device_ops velocity_netdev_ops = {
        .ndo_open               = velocity_open,
        .ndo_stop               = velocity_close,
        .ndo_start_xmit         = velocity_xmit,
        .ndo_get_stats          = velocity_get_stats,
        .ndo_validate_addr      = eth_validate_addr,
 -      .ndo_set_mac_address    = eth_mac_addr,
 -      .ndo_set_multicast_list = velocity_set_multi,
 +      .ndo_set_mac_address    = eth_mac_addr,
 +      .ndo_set_rx_mode        = velocity_set_multi,
        .ndo_change_mtu         = velocity_change_mtu,
        .ndo_do_ioctl           = velocity_ioctl,
        .ndo_vlan_rx_add_vid    = velocity_vlan_rx_add_vid,
@@@ -2705,6 -2713,7 +2701,6 @@@ static u32 velocity_get_link(struct net
        return BYTE_REG_BITS_IS_ON(PHYSR0_LINKGD, &regs->PHYSR0) ? 1 : 0;
  }
  
 -
  /**
   *    velocity_found1         -       set up discovered velocity card
   *    @pdev: PCI device
@@@ -2851,6 -2860,7 +2847,6 @@@ err_free_dev
        goto out;
  }
  
 -
  #ifdef CONFIG_PM
  /**
   *    wol_calc_crc            -       WOL CRC
@@@ -3021,7 -3031,7 +3017,7 @@@ static int velocity_suspend(struct pci_
  
        spin_lock_irqsave(&vptr->lock, flags);
        pci_save_state(pdev);
 -#ifdef ETHTOOL_GWOL
 +
        if (vptr->flags & VELOCITY_FLAGS_WOL_ENABLED) {
                velocity_get_ip(vptr);
                velocity_save_context(vptr, &vptr->context);
                pci_disable_device(pdev);
                pci_set_power_state(pdev, pci_choose_state(pdev, state));
        }
 -#else
 -      pci_set_power_state(pdev, pci_choose_state(pdev, state));
 -#endif
 +
        spin_unlock_irqrestore(&vptr->lock, flags);
        return 0;
  }
@@@ -3116,13 -3128,13 +3112,13 @@@ static int velocity_resume(struct pci_d
   *    uses this to handle all our card discover and plugging
   */
  static struct pci_driver velocity_driver = {
 -      .name   = VELOCITY_NAME,
 -      .id_table       = velocity_id_table,
 -      .probe  = velocity_found1,
 -      .remove = __devexit_p(velocity_remove1),
 +      .name           = VELOCITY_NAME,
 +      .id_table       = velocity_id_table,
 +      .probe          = velocity_found1,
 +      .remove         = __devexit_p(velocity_remove1),
  #ifdef CONFIG_PM
 -      .suspend        = velocity_suspend,
 -      .resume = velocity_resume,
 +      .suspend        = velocity_suspend,
 +      .resume         = velocity_resume,
  #endif
  };
  
@@@ -3432,99 -3444,26 +3428,99 @@@ static int velocity_set_coalesce(struc
        return 0;
  }
  
 +static const char velocity_gstrings[][ETH_GSTRING_LEN] = {
 +      "rx_all",
 +      "rx_ok",
 +      "tx_ok",
 +      "rx_error",
 +      "rx_runt_ok",
 +      "rx_runt_err",
 +      "rx_64",
 +      "tx_64",
 +      "rx_65_to_127",
 +      "tx_65_to_127",
 +      "rx_128_to_255",
 +      "tx_128_to_255",
 +      "rx_256_to_511",
 +      "tx_256_to_511",
 +      "rx_512_to_1023",
 +      "tx_512_to_1023",
 +      "rx_1024_to_1518",
 +      "tx_1024_to_1518",
 +      "tx_ether_collisions",
 +      "rx_crc_errors",
 +      "rx_jumbo",
 +      "tx_jumbo",
 +      "rx_mac_control_frames",
 +      "tx_mac_control_frames",
 +      "rx_frame_alignement_errors",
 +      "rx_long_ok",
 +      "rx_long_err",
 +      "tx_sqe_errors",
 +      "rx_no_buf",
 +      "rx_symbol_errors",
 +      "in_range_length_errors",
 +      "late_collisions"
 +};
 +
 +static void velocity_get_strings(struct net_device *dev, u32 sset, u8 *data)
 +{
 +      switch (sset) {
 +      case ETH_SS_STATS:
 +              memcpy(data, *velocity_gstrings, sizeof(velocity_gstrings));
 +              break;
 +      }
 +}
 +
 +static int velocity_get_sset_count(struct net_device *dev, int sset)
 +{
 +      switch (sset) {
 +      case ETH_SS_STATS:
 +              return ARRAY_SIZE(velocity_gstrings);
 +      default:
 +              return -EOPNOTSUPP;
 +      }
 +}
 +
 +static void velocity_get_ethtool_stats(struct net_device *dev,
 +                                     struct ethtool_stats *stats, u64 *data)
 +{
 +      if (netif_running(dev)) {
 +              struct velocity_info *vptr = netdev_priv(dev);
 +              u32 *p = vptr->mib_counter;
 +              int i;
 +
 +              spin_lock_irq(&vptr->lock);
 +              velocity_update_hw_mibs(vptr);
 +              spin_unlock_irq(&vptr->lock);
 +
 +              for (i = 0; i < ARRAY_SIZE(velocity_gstrings); i++)
 +                      *data++ = *p++;
 +      }
 +}
 +
  static const struct ethtool_ops velocity_ethtool_ops = {
 -      .get_settings   =       velocity_get_settings,
 -      .set_settings   =       velocity_set_settings,
 -      .get_drvinfo    =       velocity_get_drvinfo,
 -      .get_wol        =       velocity_ethtool_get_wol,
 -      .set_wol        =       velocity_ethtool_set_wol,
 -      .get_msglevel   =       velocity_get_msglevel,
 -      .set_msglevel   =       velocity_set_msglevel,
 -      .get_link       =       velocity_get_link,
 -      .get_coalesce   =       velocity_get_coalesce,
 -      .set_coalesce   =       velocity_set_coalesce,
 -      .begin          =       velocity_ethtool_up,
 -      .complete       =       velocity_ethtool_down
 +      .get_settings           = velocity_get_settings,
 +      .set_settings           = velocity_set_settings,
 +      .get_drvinfo            = velocity_get_drvinfo,
 +      .get_wol                = velocity_ethtool_get_wol,
 +      .set_wol                = velocity_ethtool_set_wol,
 +      .get_msglevel           = velocity_get_msglevel,
 +      .set_msglevel           = velocity_set_msglevel,
 +      .get_link               = velocity_get_link,
 +      .get_strings            = velocity_get_strings,
 +      .get_sset_count         = velocity_get_sset_count,
 +      .get_ethtool_stats      = velocity_get_ethtool_stats,
 +      .get_coalesce           = velocity_get_coalesce,
 +      .set_coalesce           = velocity_set_coalesce,
 +      .begin                  = velocity_ethtool_up,
 +      .complete               = velocity_ethtool_down
  };
  
 -#ifdef CONFIG_PM
 -#ifdef CONFIG_INET
 +#if defined(CONFIG_PM) && defined(CONFIG_INET)
  static int velocity_netdev_event(struct notifier_block *nb, unsigned long notification, void *ptr)
  {
 -      struct in_ifaddr *ifa = (struct in_ifaddr *) ptr;
 +      struct in_ifaddr *ifa = ptr;
        struct net_device *dev = ifa->ifa_dev->dev;
  
        if (dev_net(dev) == &init_net &&
  
        return NOTIFY_DONE;
  }
 -#endif        /* CONFIG_INET */
 -#endif        /* CONFIG_PM */
  
 -#if defined(CONFIG_PM) && defined(CONFIG_INET)
  static struct notifier_block velocity_inetaddr_notifier = {
 -      .notifier_call  = velocity_netdev_event,
 +      .notifier_call  = velocity_netdev_event,
  };
  
  static void velocity_register_notifier(void)
@@@ -1929,14 -1929,17 +1929,17 @@@ static voi
  vmxnet3_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
  {
        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
-       u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
-       unsigned long flags;
  
-       VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
-       spin_lock_irqsave(&adapter->cmd_lock, flags);
-       VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
-                              VMXNET3_CMD_UPDATE_VLAN_FILTERS);
-       spin_unlock_irqrestore(&adapter->cmd_lock, flags);
+       if (!(netdev->flags & IFF_PROMISC)) {
+               u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
+               unsigned long flags;
+               VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
+               spin_lock_irqsave(&adapter->cmd_lock, flags);
+               VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
+                                      VMXNET3_CMD_UPDATE_VLAN_FILTERS);
+               spin_unlock_irqrestore(&adapter->cmd_lock, flags);
+       }
  
        set_bit(vid, adapter->active_vlans);
  }
@@@ -1946,14 -1949,17 +1949,17 @@@ static voi
  vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
  {
        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
-       u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
-       unsigned long flags;
  
-       VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid);
-       spin_lock_irqsave(&adapter->cmd_lock, flags);
-       VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
-                              VMXNET3_CMD_UPDATE_VLAN_FILTERS);
-       spin_unlock_irqrestore(&adapter->cmd_lock, flags);
+       if (!(netdev->flags & IFF_PROMISC)) {
+               u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
+               unsigned long flags;
+               VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid);
+               spin_lock_irqsave(&adapter->cmd_lock, flags);
+               VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
+                                      VMXNET3_CMD_UPDATE_VLAN_FILTERS);
+               spin_unlock_irqrestore(&adapter->cmd_lock, flags);
+       }
  
        clear_bit(vid, adapter->active_vlans);
  }
@@@ -2870,7 -2876,7 +2876,7 @@@ vmxnet3_probe_device(struct pci_dev *pd
                .ndo_set_features = vmxnet3_set_features,
                .ndo_get_stats64 = vmxnet3_get_stats64,
                .ndo_tx_timeout = vmxnet3_tx_timeout,
 -              .ndo_set_multicast_list = vmxnet3_set_mc,
 +              .ndo_set_rx_mode = vmxnet3_set_mc,
                .ndo_vlan_rx_add_vid = vmxnet3_vlan_rx_add_vid,
                .ndo_vlan_rx_kill_vid = vmxnet3_vlan_rx_kill_vid,
  #ifdef CONFIG_NET_POLL_CONTROLLER
diff --combined net/ipv4/route.c
@@@ -324,7 -324,7 +324,7 @@@ static struct rtable *rt_cache_get_firs
        struct rtable *r = NULL;
  
        for (st->bucket = rt_hash_mask; st->bucket >= 0; --st->bucket) {
 -              if (!rcu_dereference_raw(rt_hash_table[st->bucket].chain))
 +              if (!rcu_access_pointer(rt_hash_table[st->bucket].chain))
                        continue;
                rcu_read_lock_bh();
                r = rcu_dereference_bh(rt_hash_table[st->bucket].chain);
@@@ -350,7 -350,7 +350,7 @@@ static struct rtable *__rt_cache_get_ne
                do {
                        if (--st->bucket < 0)
                                return NULL;
 -              } while (!rcu_dereference_raw(rt_hash_table[st->bucket].chain));
 +              } while (!rcu_access_pointer(rt_hash_table[st->bucket].chain));
                rcu_read_lock_bh();
                r = rcu_dereference_bh(rt_hash_table[st->bucket].chain);
        }
@@@ -722,7 -722,7 +722,7 @@@ static inline bool compare_hash_inputs(
  {
        return ((((__force u32)rt1->rt_key_dst ^ (__force u32)rt2->rt_key_dst) |
                ((__force u32)rt1->rt_key_src ^ (__force u32)rt2->rt_key_src) |
-               (rt1->rt_iif ^ rt2->rt_iif)) == 0);
+               (rt1->rt_route_iif ^ rt2->rt_route_iif)) == 0);
  }
  
  static inline int compare_keys(struct rtable *rt1, struct rtable *rt2)
                (rt1->rt_mark ^ rt2->rt_mark) |
                (rt1->rt_key_tos ^ rt2->rt_key_tos) |
                (rt1->rt_route_iif ^ rt2->rt_route_iif) |
-               (rt1->rt_oif ^ rt2->rt_oif) |
-               (rt1->rt_iif ^ rt2->rt_iif)) == 0;
+               (rt1->rt_oif ^ rt2->rt_oif)) == 0;
  }
  
  static inline int compare_netns(struct rtable *rt1, struct rtable *rt2)
@@@ -762,7 -761,7 +761,7 @@@ static void rt_do_flush(struct net *net
  
                if (process_context && need_resched())
                        cond_resched();
 -              rth = rcu_dereference_raw(rt_hash_table[i].chain);
 +              rth = rcu_access_pointer(rt_hash_table[i].chain);
                if (!rth)
                        continue;
  
@@@ -2321,9 -2320,8 +2320,8 @@@ int ip_route_input_common(struct sk_buf
             rth = rcu_dereference(rth->dst.rt_next)) {
                if ((((__force u32)rth->rt_key_dst ^ (__force u32)daddr) |
                     ((__force u32)rth->rt_key_src ^ (__force u32)saddr) |
-                    (rth->rt_iif ^ iif) |
+                    (rth->rt_route_iif ^ iif) |
                     (rth->rt_key_tos ^ tos)) == 0 &&
-                   rt_is_input_route(rth) &&
                    rth->rt_mark == skb->mark &&
                    net_eq(dev_net(rth->dst.dev), net) &&
                    !rt_is_expired(rth)) {
diff --combined net/ipv6/sit.c
@@@ -182,7 -182,7 +182,7 @@@ static void ipip6_tunnel_unlink(struct 
             (iter = rtnl_dereference(*tp)) != NULL;
             tp = &iter->next) {
                if (t == iter) {
 -                      rcu_assign_pointer(*tp, t->next);
 +                      RCU_INIT_POINTER(*tp, t->next);
                        break;
                }
        }
@@@ -192,8 -192,8 +192,8 @@@ static void ipip6_tunnel_link(struct si
  {
        struct ip_tunnel __rcu **tp = ipip6_bucket(sitn, t);
  
 -      rcu_assign_pointer(t->next, rtnl_dereference(*tp));
 -      rcu_assign_pointer(*tp, t);
 +      RCU_INIT_POINTER(t->next, rtnl_dereference(*tp));
 +      RCU_INIT_POINTER(*tp, t);
  }
  
  static void ipip6_tunnel_clone_6rd(struct net_device *dev, struct sit_net *sitn)
@@@ -391,7 -391,7 +391,7 @@@ ipip6_tunnel_add_prl(struct ip_tunnel *
        p->addr = a->addr;
        p->flags = a->flags;
        t->prl_count++;
 -      rcu_assign_pointer(t->prl, p);
 +      RCU_INIT_POINTER(t->prl, p);
  out:
        return err;
  }
@@@ -474,7 -474,7 +474,7 @@@ static void ipip6_tunnel_uninit(struct 
        struct sit_net *sitn = net_generic(net, sit_net_id);
  
        if (dev == sitn->fb_tunnel_dev) {
 -              rcu_assign_pointer(sitn->tunnels_wc[0], NULL);
 +              RCU_INIT_POINTER(sitn->tunnels_wc[0], NULL);
        } else {
                ipip6_tunnel_unlink(sitn, netdev_priv(dev));
                ipip6_tunnel_del_prl(netdev_priv(dev), NULL);
@@@ -672,6 -672,9 +672,9 @@@ static netdev_tx_t ipip6_tunnel_xmit(st
        if (skb->protocol != htons(ETH_P_IPV6))
                goto tx_error;
  
+       if (tos == 1)
+               tos = ipv6_get_dsfield(iph6);
        /* ISATAP (RFC4214) - must come before 6to4 */
        if (dev->priv_flags & IFF_ISATAP) {
                struct neighbour *neigh = NULL;
@@@ -1173,7 -1176,7 +1176,7 @@@ static int __net_init ipip6_fb_tunnel_i
        if (!dev->tstats)
                return -ENOMEM;
        dev_hold(dev);
 -      rcu_assign_pointer(sitn->tunnels_wc[0], tunnel);
 +      RCU_INIT_POINTER(sitn->tunnels_wc[0], tunnel);
        return 0;
  }