linux/drivers/net/ethernet
Bruce Allan bdc125f73f e1000e: 82579 potential system hang on stress when ME enabled
Previously, a workaround was added to address a hardware bug in the
PCIm2PCI arbiter where a write by the driver of the Transmit/Receive
Descriptor Tail register could happen concurrently with a write of any
MAC CSR register by the Manageability Engine (ME) which could cause the
Tail register to have an incorrect value.  The arbiter is supposed to
prevent the concurrent writes but there is a bug that can cause the Host
(driver) access to be acknowledged later than it should.
After further investigation, it was discovered that a driver write access
of any MAC CSR register after being idle for some time can be lost when
ME is accessing a MAC CSR register.  When this happens, no further target
access is claimed by the MAC which could hang the system.
The workaround to check bit 24 in the FWSM register (set only when ME is
accessing a MAC CSR register) and delay for a limited amount of time until
it is cleared is now done for all driver writes of MAC CSR registers on
82579 with ME enabled.  In the rare case when the driver is writing the
Tail register and ME is accessing any MAC CSR register for a duration
longer than the maximum delay, write the register and verify it has the
correct value before continuing, otherwise reset the device.

This patch also moves some pre-existing macros from the hardware-specific
header file to the more appropriate generic driver header file.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2012-04-27 02:25:13 -07:00
..
3com Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
8390 8390: select CRC32 support 2012-04-21 15:28:47 -04:00
adaptec starfire: remove deprecated options. 2012-04-07 11:45:26 +02:00
adi bfin: Fix build failure due to get_ts_info() changes. 2012-04-06 00:17:50 -04:00
aeroflex ethernet: unify return value of .ndo_set_mac_address if address is invalid 2012-02-23 17:03:20 -05:00
alteon Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
amd Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
apple netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
atheros atl1c: refine start/enable code for MAC module 2012-04-26 05:03:33 -04:00
broadcom Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-23 23:15:17 -04:00
brocade bna: Update driver version to 3.0.23.0 2012-04-04 18:19:18 -04:00
cadence macb: Support the get_ts_info ethtool method. 2012-04-04 05:28:47 -04:00
calxeda net: use eth_hw_addr_random() and reset addr_assign_type 2012-02-15 15:34:17 -05:00
chelsio simple_open: automatically convert to simple_open() 2012-04-05 15:25:50 -07:00
cirrus Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
cisco enic: replace open-coded ARRAY_SIZE with macro 2012-04-13 13:15:14 -04:00
davicom net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
dec dmfe: enforce consistent timing delay. 2012-04-17 22:54:13 -04:00
dlink Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-10 14:30:45 -04:00
emulex be2net: update the driver version 2012-04-27 00:03:36 -04:00
faraday net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
freescale gianfar: add GRO support 2012-04-21 16:43:34 -04:00
fujitsu Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
hp netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-06 11:52:27 -05:00
i825xx Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
ibm powerpc+sparc/vio: Modernize driver registration 2012-03-28 11:33:24 +11:00
icplus netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-06 11:52:27 -05:00
intel e1000e: 82579 potential system hang on stress when ME enabled 2012-04-27 02:25:13 -07:00
marvell Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-10 14:30:45 -04:00
mellanox mlx4_en: Byte Queue Limit support 2012-04-23 22:34:02 -04:00
micrel Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-23 23:15:17 -04:00
microchip net: use eth_hw_addr_random() and reset addr_assign_type 2012-02-15 15:34:17 -05:00
myricom myri10ge: stop using net_device.{base_addr, irq}. 2012-04-07 11:58:09 +02:00
natsemi Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-10 14:30:45 -04:00
neterion Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-10 14:30:45 -04:00
nuvoton netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
nvidia Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-10 14:30:45 -04:00
nxp net: lpc_eth: no need to reserve 8 extra bytes in rx skb 2012-04-04 18:08:49 -04:00
octeon octeon: fix PHY name to match MDIO bus name 2012-02-13 16:04:09 -05:00
oki-semi pch_gbe: remove suspicious comment 2012-04-21 15:27:45 -04:00
packetengines yellowfin: stop using net_device.{base_addr, irq}. 2012-04-07 11:45:26 +02:00
pasemi ethernet: unify return value of .ndo_set_mac_address if address is invalid 2012-02-23 17:03:20 -05:00
qlogic qlcnic: Allow a predefined set of capture masks for FW dump 2012-04-27 00:03:35 -04:00
racal netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
rdc r6040: update copyright from 2007 to now 2012-04-12 16:06:24 -04:00
realtek r8169: support the new RTL8411 chip. 2012-04-17 11:22:41 +02:00
renesas Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-10 14:30:45 -04:00
seeq Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
sfc MTD merge for 3.4 2012-03-30 17:31:56 -07:00
sgi net: meth: Add set_rx_mode hook to fix ICMPv6 neighbor discovery 2011-12-27 13:17:34 -05:00
silan sc92031: stop using net_device.{base_addr, irq} 2012-04-07 11:45:27 +02:00
sis sis900: stop using net_device.{base_addr, irq} and convert to __iomem. 2012-04-07 11:47:18 +02:00
smsc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-23 23:15:17 -04:00
stmicro stmmac: do not fail when probe and there is no csr clk defined 2012-04-19 20:09:06 -04:00
sun sungem: use mdelay instead of udelay where necessary 2012-04-21 15:28:48 -04:00
tehuti net: Fix spelling typo in net 2012-04-14 15:29:02 -04:00
ti Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-23 23:15:17 -04:00
tile drivers/net/ethernet/tile: fix netdev_alloc_skb() bombing 2012-04-02 13:17:37 -04:00
toshiba net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
tundra Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
via Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-10 14:30:45 -04:00
wiznet net: WIZnet drivers: fix possible NULL dereference 2012-04-13 13:34:12 -04:00
xilinx Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-15 13:19:04 -04:00
xircom Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
xscale net: remove ixp2000 ethernet driver 2012-04-04 18:09:37 -04:00
dnet.c dnet: Support the get_ts_info ethtool method. 2012-04-04 05:28:46 -04:00
dnet.h
ethoc.c ethoc: set addr_assign_type if random_ether_addr() used 2012-02-17 15:58:06 -05:00
fealnx.c fealnx: Remove unused local label 'out' in netdev_open(). 2012-04-07 09:02:32 -04:00
jme.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-02-26 21:55:51 -05:00
jme.h jme: Fix FIFO flush issue 2012-02-22 14:44:41 -05:00
Kconfig Ethernet driver for the WIZnet W5300 chip 2012-04-05 01:43:02 -04:00
korina.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
lantiq_etop.c ethernet: Fix typo in lantiq_etop.c 2012-02-19 19:02:42 -05:00
Makefile Ethernet driver for the WIZnet W5300 chip 2012-04-05 01:43:02 -04:00
mipsnet.c net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
netx-eth.c netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
s6gmac.c ethernet: replace open-coded ARRAY_SIZE with macro 2012-04-13 13:15:14 -04:00