1
linux/drivers/net
Michael Chan afdc08b9f9 [BNX2]: Fix rtnl deadlock in bnx2_close
This fixes an rtnl deadlock problem when flush_scheduled_work() is
called from bnx2_close(). In rare cases, linkwatch_event() may be on
the workqueue from a previous close of a different device and it will
try to get the rtnl lock which is already held by dev_close().

The fix is to set a flag if we are in the reset task which is run
from the workqueue. bnx2_close() will loop until the flag is cleared.
As suggested by Jeff Garzik, the loop is changed to call msleep(1)
instead of yield() in the original patch.

flush_scheduled_work() is also moved to bnx2_remove_one() before the
netdev is freed.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2005-08-29 16:10:29 -07:00
..
appletalk
arcnet
arm
bonding [NET]: Kill skb->real_dev 2005-08-29 15:32:25 -07:00
cris
e1000
fec_8xx
hamradio [NET]: Kill skb->real_dev 2005-08-29 15:32:25 -07:00
ibm_emac
irda
ixgb
pcmcia
phy [PATCH] PHY Layer fixup 2005-08-28 20:28:25 -04:00
sk98lin
skfp
tokenring
tulip
wan [NET]: Kill skb->real_dev 2005-08-29 15:32:25 -07:00
wireless
3c59x.c
3c501.c
3c501.h
3c503.c
3c503.h
3c505.c
3c505.h
3c507.c
3c509.c
3c515.c
3c523.c
3c523.h
3c527.c
3c527.h
7990.c
7990.h
8139cp.c
8139too.c
8390.c
8390.h
82596.c
a2065.c
a2065.h
ac3200.c
acenic_firmware.h
acenic.c
acenic.h
amd8111e.c
amd8111e.h
apne.c
ariadne.c
ariadne.h
at1700.c
atari_bionet.c
atari_pamsnet.c
atarilance.c
atp.c
atp.h
au1000_eth.c
au1000_eth.h
b44.c
b44.h
bmac.c
bmac.h
bnx2_fw.h
bnx2.c [BNX2]: Fix rtnl deadlock in bnx2_close 2005-08-29 16:10:29 -07:00
bnx2.h [BNX2]: Fix rtnl deadlock in bnx2_close 2005-08-29 16:10:29 -07:00
bsd_comp.c
cs89x0.c
cs89x0.h
de600.c
de600.h
de620.c
de620.h
declance.c
defxx.c
defxx.h
depca.c
depca.h
dgrs_asstruct.h
dgrs_bcomm.h
dgrs_es4h.h
dgrs_ether.h
dgrs_firmware.c
dgrs_i82596.h
dgrs_plx9060.h
dgrs.c
dgrs.h
dl2k.c
dl2k.h
dm9000.c
dm9000.h
dummy.c
e100.c
e2100.c
eepro100.c
eepro.c
eexpress.c
eexpress.h
epic100.c
eql.c
es3210.c
eth16i.c
ewrk3.c
ewrk3.h
fealnx.c
fec.c
fec.h
forcedeth.c
gianfar_ethtool.c
gianfar_phy.c
gianfar_phy.h
gianfar.c
gianfar.h
gt64240eth.h
gt96100eth.c
gt96100eth.h
hamachi.c
hp100.c
hp100.h
hp-plus.c
hp.c
hplance.c
hplance.h
hydra.c
hydra.h
ibmlana.c
ibmlana.h
ibmveth.c
ibmveth.h
ioc3-eth.c
isa-skeleton.c
iseries_veth.c
iseries_veth.h
jazzsonic.c
Kconfig
lance.c
lasi_82596.c
LICENSE.SRC
lne390.c
loopback.c
lp486e.c
mac89x0.c
mac8390.c
mace.c
mace.h
macmace.c
macsonic.c
Makefile
meth.c
meth.h
mii.c
mv643xx_eth.c
mv643xx_eth.h
mvme147.c
myri_code.h
myri_sbus.c
myri_sbus.h
natsemi.c
ne2.c
ne2k-pci.c
ne3210.c
ne-h8300.c
ne.c
netconsole.c
ni52.c
ni52.h
ni65.c
ni65.h
ni5010.c
ni5010.h
ns83820.c
oaknet.c
pci-skeleton.c
pcnet32.c
plip.c
ppp_async.c
ppp_deflate.c
ppp_generic.c [NET]: Remove explicit initializations of skb->input_dev 2005-08-29 15:33:26 -07:00
ppp_synctty.c
pppoe.c [NET]: Kill skb->real_dev 2005-08-29 15:32:25 -07:00
pppox.c
r8169.c
rrunner.c [NET]: Remove HIPPI private from skbuff.h 2005-08-29 15:31:42 -07:00
rrunner.h
s2io-regs.h
s2io.c
s2io.h
saa9730.c
saa9730.h
sb1000.c
sb1250-mac.c
seeq8005.c
seeq8005.h
sgiseeq.c
sgiseeq.h
shaper.c [NET]: Kill skb->list 2005-08-29 15:31:14 -07:00
sis900.c
sis900.h
sk_mca.c
sk_mca.h
skge.c
skge.h
slhc.c
slip.c
slip.h
smc91x.c
smc91x.h
smc9194.c
smc9194.h
smc-mca.c
smc-ultra32.c
smc-ultra.c [PATCH] missing include in smc-ultra 2005-08-29 10:42:40 -07:00
sonic.c
sonic.h
Space.c
starfire_firmware.h
starfire_firmware.pl
starfire.c
stnic.c
sun3_82586.c
sun3_82586.h
sun3lance.c
sunbmac.c
sunbmac.h
sundance.c
sungem_phy.c
sungem_phy.h
sungem.c
sungem.h
sunhme.c
sunhme.h
sunlance.c
sunqe.c
sunqe.h
tc35815.c
tg3.c [TG3]: Fix bug in setting a tg3_flag 2005-08-29 15:50:49 -07:00
tg3.h [TG3]: Add indirect register method for 5703 behind ICH 2005-08-29 15:50:42 -07:00
tlan.c
tlan.h
tun.c
typhoon-firmware.h
typhoon.c
typhoon.h
via-rhine.c
via-velocity.c
via-velocity.h
wd.c
yellowfin.c
znet.c
zorro8390.c