linux/drivers/net/ethernet
Ben Hutchings 7153f623ea sfc: Fix reset vs probe/remove/PM races involving efx_nic::state
We try to defer resets while the device is not READY, but we're not
doing this quite correctly.  In particular, changes to efx_nic::state
are documented as serialised by the RTNL lock, but they aren't.

1. We check whether a reset was requested during probe (suggesting
broken hardware) before we allow requested resets to be scheduled.
This leaves a window where a requested reset would be deferred
indefinitely.

2. Although we cancel the reset work item during device removal,
there are still later operations that can cause it to be scheduled
again.  We need to check the state before scheduling it.

3. Since the state can change between scheduling and running of
the work item, we still need to check it there, and we need to
do so *after* acquiring the RTNL lock which serialises state
changes.

4. We must cancel the reset work item during device removal, if the
state could ever have been READY.  This wasn't done in some of the
failure paths from efx_pci_probe().  Move the cancellation to
efx_pci_remove_main().

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
2012-08-24 20:10:22 +01:00
..
3com drivers/net/ethernet: Fix (nearly-)kernel-doc comments for various functions 2012-07-10 23:13:46 -07:00
8390 net: add support for NS8390 based eth controllers on some ColdFire CPU boards 2012-07-12 07:54:45 -07: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: Remove casts to same type 2012-06-06 09:31:33 -07:00
alteon Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
amd lance: remove unnecessary setting of skb->dev 2012-07-10 23:24:56 -07:00
apple ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
atheros atl1c: fix issue of io access mode for AR8152 v2.1 2012-07-20 11:21:18 -07:00
broadcom bnx2x: Fix compiler warnings 2012-08-12 13:42:18 -07:00
brocade drivers/net/ethernet: Fix non-kernel-doc comments with kernel-doc start markers 2012-07-10 23:13:46 -07:00
cadence net/macb: manage carrier state with call to netif_carrier_{on|off}() 2012-07-09 00:03:06 -07:00
calxeda net: calxedaxgmac: enable rx cut-thru mode 2012-07-10 23:25:47 -07:00
chelsio netvm: propagate page->pfmemalloc from skb_alloc_page to skb 2012-07-31 18:42:46 -07:00
cirrus cirrus: cs89x0: Remove function prototypes and reorder declarations 2012-05-18 23:48:07 -04:00
cisco enic: remove unnecessary setting of skb->dev 2012-07-10 23:24:56 -07:00
davicom dm9000: some coldfire boards need this 2012-05-14 18:40:16 -04:00
dec ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
dlink Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-05-07 23:35:40 -04:00
emulex emulex: benet: Add a missing CR in the end of message 2012-08-03 16:43:03 -07:00
faraday net: ftgmac100/ftmac100: dont pull too much data 2012-07-18 09:40:53 -07:00
freescale net/fsl: introduce Freescale 10G MDIO driver 2012-08-24 12:42:42 -04:00
fujitsu drivers/net: delete all code/drivers depending on CONFIG_MCA 2012-05-17 16:37:41 -04:00
hp ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
i825xx ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
ibm drivers/net/ethernet: Fix non-kernel-doc comments with kernel-doc start markers 2012-07-10 23:13:46 -07:00
icplus
intel Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next 2012-08-22 14:23:43 -07:00
marvell Merge branch 'v3.5-rc7-fixes' of git://github.com/lunn/linux into fixes 2012-07-25 21:37:09 +02:00
mellanox Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-08-21 16:46:08 -07:00
micrel ethernet: Use eth_random_addr 2012-07-16 22:38:27 -07:00
microchip net: use eth_hw_addr_random() and reset addr_assign_type 2012-02-15 15:34:17 -05:00
myricom myri10ge: set maximal number of default RSS queues 2012-07-05 03:06:44 -07:00
natsemi drivers/net: delete all code/drivers depending on CONFIG_MCA 2012-05-17 16:37:41 -04:00
neterion net: fix race condition in several drivers when reading stats 2012-07-22 12:12:32 -07:00
nuvoton
nvidia forcedeth: advertise transmit time stamping 2012-07-22 12:33:32 -07:00
nxp lpc_eth: remove obsolete ifdefs 2012-08-08 16:07:51 -07:00
octeon netdev: octeon_mgmt: Convert to use device tree. 2012-07-23 13:54:53 +01:00
oki-semi pch_gbe: vlan skb len fix 2012-07-26 14:30:23 -07:00
packetengines yellowfin: stop using net_device.{base_addr, irq}. 2012-04-07 11:45:26 +02:00
pasemi net/pasemi: fix compiler warning 2012-05-02 20:52:48 -04:00
qlogic qlge: Add offload features to vlan interfaces 2012-07-29 23:18:30 -07:00
racal
rdc r6040: use module_pci_driver macro 2012-07-09 14:42:30 -07:00
realtek r8169: revert "add byte queue limit support". 2012-07-23 18:27:00 -07:00
renesas net: sh_eth: Add eth support for R8A7779 device 2012-08-20 02:16:54 -07:00
seeq seeq: use PTR_RET at init_module of driver 2012-07-29 23:18:30 -07:00
sfc sfc: Fix reset vs probe/remove/PM races involving efx_nic::state 2012-08-24 20:10:22 +01:00
sgi ethernet: Remove casts to same type 2012-06-06 09:31:33 -07: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 ethernet: Use eth_random_addr 2012-07-16 22:38:27 -07:00
stmicro net/stmmac: fix issue of clk_get for Loongson1B. 2012-08-20 02:52:20 -07:00
sun niu: Change niu_rbr_fill() to use unlikely() to check niu_rbr_add_page() return value 2012-07-22 23:31:07 -07:00
tehuti drivers/net/ethernet: Fix (nearly-)kernel-doc comments for various functions 2012-07-10 23:13:46 -07:00
ti Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-08-22 14:21:38 -07:00
tile tilegx net: use eth_hw_addr_random(), not eth_random_addr() 2012-07-18 15:07:45 -04:00
toshiba drivers/net/ethernet: Fix (nearly-)kernel-doc comments for various functions 2012-07-10 23:13:46 -07:00
tundra Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
via ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
wiznet net: wiznet add missing HAS_IOMEM dependency 2012-07-25 15:24:13 -07:00
xilinx ethernet: Use eth_random_addr 2012-07-16 22:38:27 -07:00
xircom Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
xscale ixp4xx_eth: fix ptp_ixp46x build failure 2012-08-06 13:30:01 -07:00
dnet.c dnet: Support the get_ts_info ethtool method. 2012-04-04 05:28:46 -04:00
dnet.h
ethoc.c ethernet: Use eth_random_addr 2012-07-16 22:38:27 -07:00
fealnx.c fealnx: Remove unused local label 'out' in netdev_open(). 2012-04-07 09:02:32 -04:00
jme.c jme: netpoll support 2012-07-18 09:40:54 -07: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: Use eth_random_addr 2012-07-16 22:38:27 -07: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
s6gmac.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-05-22 19:22:50 -07:00