linux/drivers/net
Herbert Xu 932ff279a4 [NET]: Add netif_tx_lock
Various drivers use xmit_lock internally to synchronise with their
transmission routines.  They do so without setting xmit_lock_owner.
This is fine as long as netpoll is not in use.

With netpoll it is possible for deadlocks to occur if xmit_lock_owner
isn't set.  This is because if a printk occurs while xmit_lock is held
and xmit_lock_owner is not set can cause netpoll to attempt to take
xmit_lock recursively.

While it is possible to resolve this by getting netpoll to use
trylock, it is suboptimal because netpoll's sole objective is to
maximise the chance of getting the printk out on the wire.  So
delaying or dropping the message is to be avoided as much as possible.

So the only alternative is to always set xmit_lock_owner.  The
following patch does this by introducing the netif_tx_lock family of
functions that take care of setting/unsetting xmit_lock_owner.

I renamed xmit_lock to _xmit_lock to indicate that it should not be
used directly.  I didn't provide irq versions of the netif_tx_lock
functions since xmit_lock is meant to be a BH-disabling lock.

This is pretty much a straight text substitution except for a small
bug fix in winbond.  It currently uses
netif_stop_queue/spin_unlock_wait to stop transmission.  This is
unsafe as an IRQ can potentially wake up the queue.  So it is safer to
use netif_tx_disable.

The hamradio bits used spin_lock_irq but it is unnecessary as
xmit_lock must never be taken in an IRQ handler.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2006-06-17 21:30:14 -07:00
..
appletalk [APPLETALK]: warning fix 2006-02-13 15:53:41 -08:00
arcnet Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2006-04-02 12:58:45 -07:00
arm [PATCH] AT91RM9200 Ethernet driver 2006-03-24 12:10:55 -05:00
bonding [NET]: Add netif_tx_lock 2006-06-17 21:30:14 -07:00
chelsio kbuild: fix unneeded rebuilds in drivers/net/chelsio after moving source tree 2006-04-04 16:51:41 +02:00
cris [PATCH] cris v10 eth: use ethtool_ops 2005-11-09 01:10:09 -05:00
e1000 e1000: remove risky prefetch on next_skb->data 2006-06-08 09:28:47 -07:00
fec_8xx [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
fs_enet [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
hamradio [NET]: Add netif_tx_lock 2006-06-17 21:30:14 -07:00
ibm_emac [PATCH] ibm_emac sparse annotations 2006-01-28 21:42:15 -05:00
irda [NET]: Add netif_tx_lock 2006-06-17 21:30:14 -07:00
ixgb [PATCH] Use pci_set_consistent_dma_mask in ixgb driver 2006-04-12 18:11:23 -04:00
ixp2000 The ixp2000 driver for the enp2611 was developed on a board with 2006-05-15 12:25:29 -07:00
pcmcia [PATCH] nmclan_cs: dereferencing skb after netif_rx() 2006-06-05 12:29:15 -07:00
phy phy: mdiobus_register(): initialize all phy_map entries 2006-05-10 14:03:57 -07:00
sk98lin [PATCH] s/;;/;/g 2006-03-24 07:33:24 -08:00
skfp [PATCH] skfp warning fixes 2006-03-21 16:00:53 -05:00
tokenring BUG_ON() Conversion in drivers/net/ 2006-04-02 13:52:48 +02:00
tulip [NET]: Add netif_tx_lock 2006-06-17 21:30:14 -07:00
wan [WAN]: Remove broken and unmaintained Sangoma drivers. 2006-04-11 17:28:33 -07:00
wireless [NET]: Add netif_tx_lock 2006-06-17 21:30:14 -07:00
3c59x.c [PATCH] 3c59x: fix networking for 10base2 NICs 2006-03-31 12:18:55 -08:00
3c501.c
3c501.h
3c503.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
3c503.h
3c505.c [PATCH] clean up inline static vs static inline 2005-07-27 16:26:20 -07:00
3c505.h
3c507.c
3c509.c [PATCH] 3c509: use proper suspend/resume API 2006-03-11 20:32:17 -05:00
3c515.c
3c523.c [PATCH] drivers/net/*: use time_after() and friends 2006-01-17 07:59:23 -05:00
3c523.h
3c527.c
3c527.h [PATCH] Eliminate __attribute__ ((packed)) warnings for gcc-4.1 2006-01-08 20:14:07 -08:00
7990.c [PATCH] bogus include of linux/irq.h in 7990.c 2006-01-28 21:42:28 -05:00
7990.h
8139cp.c BUG_ON() Conversion in drivers/net/ 2006-04-02 13:52:48 +02:00
8139too.c [PATCH] Fix "value computed not used" warnings 2006-03-24 07:33:28 -08:00
8390.c [PATCH] 8390 Tx fix for non i386 machines 2005-09-23 05:18:45 -04:00
8390.h [PATCH] net: remove CONFIG_NET_CBUS conditional for NS8390 2006-03-29 17:34:02 -05:00
82596.c [PATCH] wrong ifdefs in 82596.c 2006-01-28 21:42:31 -05:00
Kconfig [PATCH] uml: kconfigs 2006-03-31 12:18:51 -08:00
LICENSE.SRC
Makefile [PATCH] fix spidernet build issue 2006-03-22 20:28:04 -05:00
Space.c [PATCH] macsonic/jazzsonic network drivers update 2005-08-23 01:32:12 -04:00
a2065.c [PATCH] amiga: fix driver_register() return handling, remove zorro_module_init() 2006-03-25 08:22:53 -08:00
a2065.h
ac3200.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
acenic.c [PATCH] acenic: fix checking of read_eeprom_byte() return values 2006-01-26 22:09:40 -05:00
acenic.h
acenic_firmware.h [PATCH] acenic: fix section mismatches 2006-03-29 17:28:49 -05:00
amd8111e.c [git] change permissions on drivers/net/amd8111e.[ch] to 0644, 2005-10-28 16:43:40 -04:00
amd8111e.h [git] change permissions on drivers/net/amd8111e.[ch] to 0644, 2005-10-28 16:43:40 -04:00
apne.c [PATCH] drivers/net/*: use time_after() and friends 2006-01-17 07:59:23 -05:00
ariadne.c [PATCH] amiga: fix driver_register() return handling, remove zorro_module_init() 2006-03-25 08:22:53 -08:00
ariadne.h
at1700.c
atari_bionet.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
atari_pamsnet.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
atarilance.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
atp.c
atp.h
au1000_eth.c au1000_eth.c: use ether_crc() from <linux/crc32.h> 2006-05-08 16:00:47 -07:00
au1000_eth.h
b44.c [PATCH] x86_64: Check for bad dma address in b44 1GB DMA workaround 2006-05-16 07:59:31 -07:00
b44.h [PATCH] b44: replace B44_FLAG_INIT_COMPLETE with netif_running() 2005-11-09 01:02:41 -05:00
bmac.c Merge ../linux-2.6 by hand 2005-10-31 13:37:12 +11:00
bmac.h
bnx2.c [NET]: Add netif_tx_lock 2006-06-17 21:30:14 -07:00
bnx2.h [BNX2]: Separate tx producer and consumer fields 2006-03-23 01:13:43 -08:00
bnx2_fw.h Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
bsd_comp.c [PATCH] vfree and kfree cleanup in drivers/ 2005-09-10 10:06:30 -07:00
cassini.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
cassini.h [CASSINI]: sem2mutex 2006-03-20 22:34:09 -08:00
cs89x0.c [PATCH] cs89x0: credit Dmitry Pervushin 2006-01-16 23:15:32 -08:00
cs89x0.h [PATCH] cs89x0: cleanly implement ixdp2x01 and pnx0501 support 2006-01-08 20:12:45 -08:00
de600.c
de600.h
de620.c [PATCH] de620: fix section mismatch warning 2006-03-11 13:29:09 -05:00
de620.h
declance.c [PATCH] declance: Use physical addresses at the interface level. 2005-10-18 18:03:48 -04:00
defxx.c
defxx.h
depca.c [PATCH] Use of uninitialized variable in drivers/net/depca.c 2006-03-22 20:30:45 -05:00
depca.h
dgrs.c [PATCH] EISA: tidy-up driver_register() return value 2006-03-25 08:22:53 -08:00
dgrs.h
dgrs_asstruct.h
dgrs_bcomm.h
dgrs_es4h.h
dgrs_ether.h
dgrs_firmware.c Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
dgrs_i82596.h
dgrs_plx9060.h
dl2k.c [PATCH] dl2k needs dma-mapping.h 2006-05-15 11:20:58 -07:00
dl2k.h
dm9000.c Merge master.kernel.org:/home/rmk/linux-2.6-drvmodel 2005-11-11 09:24:26 -08:00
dm9000.h
dummy.c
e100.c Merge branch 'upstream-fixes' 2006-03-16 19:27:08 -05:00
e2100.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
eepro.c [PATCH] remove some more check_region stuff 2005-10-30 17:37:18 -08:00
eepro100.c Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
eexpress.c
eexpress.h
epic100.c Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
eql.c BUG_ON() Conversion in drivers/net/ 2006-04-02 13:52:48 +02:00
es3210.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
eth16i.c [PATCH] drivers/net/*: use time_after() and friends 2006-01-17 07:59:23 -05:00
ewrk3.c
ewrk3.h
fealnx.c Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
fec.c [PATCH] m68knommu: FEC ethernet support for the ColdFire 5208 2005-11-07 08:00:47 -08:00
fec.h [PATCH] m68knommu: FEC ethernet header support for the ColdFire 5208 2005-11-07 08:00:47 -08:00
forcedeth.c [NET]: Add netif_tx_lock 2006-06-17 21:30:14 -07:00
gianfar.c [PATCH] Fix locking in gianfar 2006-04-20 17:55:06 -04:00
gianfar.h [PATCH] Fix locking in gianfar 2006-04-20 17:55:06 -04:00
gianfar_ethtool.c [PATCH] Fix locking in gianfar 2006-04-20 17:55:06 -04:00
gianfar_mii.c [PATCH] gianfar: Fix sparse warnings 2006-02-07 02:04:33 -05:00
gianfar_mii.h [PATCH] Gianfar update and sysfs support 2005-11-18 13:31:26 -05:00
gianfar_sysfs.c [PATCH] Fix locking in gianfar 2006-04-20 17:55:06 -04:00
gt64240eth.h
gt96100eth.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
gt96100eth.h
hamachi.c Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
hp-plus.c [PATCH] remove ISA legacy functions: drivers/net/hp-plus.c 2006-03-24 07:33:19 -08:00
hp.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
hp100.c Merge branch 'viro' 2006-02-09 14:17:05 -05:00
hp100.h
hplance.c [PATCH] hp300: fix driver_register() return handling, remove dio_module_init() 2006-03-25 08:22:53 -08:00
hplance.h
hydra.c [PATCH] amiga: fix driver_register() return handling, remove zorro_module_init() 2006-03-25 08:22:53 -08:00
ibmlana.c
ibmlana.h
ibmveth.c [PATCH] powerpc/pseries: Change H_StudlyCaps to H_SHOUTING_CAPS 2006-04-01 22:36:57 +11:00
ibmveth.h [PATCH] ibmveth lockless TX 2005-10-28 16:07:30 -04:00
ifb.c [NET]: Add netif_tx_lock 2006-06-17 21:30:14 -07:00
ioc3-eth.c [PATCH] Replace 0xff.. with correct DMA_xBIT_MASK 2006-03-28 09:16:07 -08:00
isa-skeleton.c
iseries_veth.c [PATCH] powerpc: remove bitfields from HvLpEvent 2006-01-12 20:09:29 +11:00
jazzsonic.c [PATCH] jazzsonic: Fix platform device code 2005-12-01 02:26:46 -05:00
lance.c [PATCH] remove ISA legacy functions: drivers/net/lance.c 2006-03-24 07:33:19 -08:00
lasi_82596.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
lne390.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
loopback.c [PATCH] for_each_possible_cpu: loopback device. 2006-03-28 09:16:05 -08:00
lp486e.c [PATCH] lp486e: remove SLOW_DOWN_IO 2006-02-01 08:53:10 -08:00
mac89x0.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
mac8390.c [PATCH] m68k: lvalues abuse in mac8390 2006-01-12 09:09:01 -08:00
mace.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
mace.h
macmace.c
macsonic.c [PATCH] macsonic.c: missed s/driver_unregister/platform_driver_unregister/ 2006-01-28 21:42:22 -05:00
meth.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
meth.h
mii.c [PATCH] mii: Add test for GigE support 2005-09-14 08:46:21 -04:00
mipsnet.c Create platform_device.h to contain all the platform device details. 2005-10-29 19:07:23 +01:00
mipsnet.h [PATCH] mipsnet: Fix Copyright notice. 2005-12-01 02:26:45 -05:00
mv643xx_eth.c [PATCH] mv643xx_eth: provide sysfs class device symlink 2006-05-02 15:18:54 -04:00
mv643xx_eth.h [PATCH] mv643xx_eth: Cache align skb->data if CONFIG_NOT_COHERENT_CACHE 2006-03-21 16:00:51 -05:00
mvme147.c
myri_code.h
myri_sbus.c [PATCH] gfp_t: drivers/net 2005-10-28 08:16:51 -07:00
myri_sbus.h [PATCH] gfp_t: drivers/net 2005-10-28 08:16:51 -07:00
natsemi.c [NET]: Add netif_tx_lock 2006-06-17 21:30:14 -07:00
ne-h8300.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
ne.c Fix RTL8019AS init for Toshiba RBTX49xx boards 2006-05-08 16:00:58 -07:00
ne2.c [PATCH] drivers/net/*: use time_after() and friends 2006-01-17 07:59:23 -05:00
ne2k-pci.c BUG_ON() Conversion in drivers/net/ 2006-04-02 13:52:48 +02:00
ne3210.c [PATCH] drivers/net/ne3210.c: cleanups 2005-09-05 18:02:31 -04:00
netconsole.c [NETCONSOLE]: Clean up initcall warning. 2006-06-05 15:04:37 -07:00
ni52.c
ni52.h
ni65.c drivers/net: Remove pointless checks for NULL prior to calling kfree() 2005-10-28 16:53:13 -04:00
ni65.h
ni5010.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
ni5010.h
ns83820.c BUG_ON() Conversion in drivers/net/ 2006-04-02 13:52:48 +02:00
oaknet.c [PATCH] drivers/net/*: use time_after() and friends 2006-01-17 07:59:23 -05:00
pci-skeleton.c [PATCH] turn "const static" into "static const" 2006-01-10 08:01:55 -08:00
pcnet32.c [PATCH] pcnet32: remove incorrect pcnet32_free_ring 2006-05-26 21:33:18 -04:00
plip.c Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
ppp_async.c [PATCH] drivers/net/*: use time_after() and friends 2006-01-17 07:59:23 -05:00
ppp_deflate.c
ppp_generic.c [PATCH] sem2mutex: drivers: raw, connector, dcdbas, ppp_generic 2006-03-23 07:38:10 -08:00
ppp_mppe.c [PPP]: add PPP MPPE encryption module 2005-11-08 09:40:47 -08:00
ppp_mppe.h [PPP]: add PPP MPPE encryption module 2005-11-08 09:40:47 -08:00
ppp_synctty.c Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
pppoe.c [PPPOE]: Missing result check in __pppoe_xmit(). 2006-06-05 15:34:33 -07:00
pppox.c [PPPOX]: Fix assignment into const proto_ops. 2006-01-03 13:11:23 -08:00
r8169.c Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
rionet.c [PATCH] Add rapidio net driver 2005-09-14 09:18:21 -04:00
rrunner.c drivers/net: Remove pointless checks for NULL prior to calling kfree() 2005-10-28 16:53:13 -04:00
rrunner.h
s2io-regs.h [PATCH] S2io: Offline diagnostics fixes 2005-10-18 16:58:27 -04:00
s2io.c Merge branch 'upstream-fixes' 2006-03-04 12:07:07 -05:00
s2io.h Merge branch 'lro' 2006-03-02 14:26:30 -05:00
saa9730.c [PATCH] SAA9730: Driver overhaul 2005-11-11 08:31:35 -05:00
saa9730.h [PATCH] SAA9730: Add missing header bits. 2005-11-18 13:29:41 -05:00
sb1000.c Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
sb1250-mac.c [PATCH] sb1250-mac: Add support for the BCM1480 2006-03-03 21:23:02 -05:00
seeq8005.c [PATCH] drivers/net/*: use time_after() and friends 2006-01-17 07:59:23 -05:00
seeq8005.h
sgiseeq.c [PATCH] Sparse: Cleanup sgiseeq sparse warnings. 2006-03-11 20:32:17 -05:00
sgiseeq.h
shaper.c [PATCH] drivers/net/*: use time_after() and friends 2006-01-17 07:59:23 -05:00
sis190.c Massive net driver const-ification. 2006-03-03 21:33:57 -05:00
sis900.c sis900: phy for FoxCon motherboard 2006-05-10 14:04:52 -07:00
sis900.h [PATCH] sis900: remove cfgpmcsr I/O space register define 2006-02-07 01:58:36 -05:00
sk_mca.c [PATCH] changing CONFIG_LOCALVERSION rebuilds too much, for no good reason 2005-11-09 07:55:57 -08:00
sk_mca.h [PATCH] changing CONFIG_LOCALVERSION rebuilds too much, for no good reason 2005-11-09 07:55:57 -08:00
skge.c [PATCH] skge: don't allow transmit ring to be too small 2006-05-20 00:17:07 -04:00
skge.h [PATCH] skge: compute available ring buffers 2006-03-23 17:13:54 -05:00
sky2.c [PATCH] sky2: netconsole suspend/resume interaction 2006-06-17 10:52:12 -07:00
sky2.h [PATCH] sky2: more fixes for Yukon Ultra 2006-05-20 00:15:39 -04:00
slhc.c
slip.c [PATCH] TTY layer buffering revamp 2006-01-10 08:01:59 -08:00
slip.h
smc-mca.c
smc-ultra.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
smc-ultra32.c
smc91x.c [PATCH] smc91x: allow for dynamic bus access configs 2006-03-21 16:00:53 -05:00
smc91x.h [PATCH] smc91x: allow for dynamic bus access configs 2006-03-21 16:00:53 -05:00
smc9194.c
smc9194.h
sonic.c [PATCH] macsonic/jazzsonic network drivers update 2005-08-23 01:32:12 -04:00
sonic.h [PATCH] macsonic/jazzsonic network drivers update 2005-08-23 01:32:12 -04:00
spider_net.c spidernet: enable support for bcm5461 ethernet phy 2006-05-08 16:01:12 -07:00
spider_net.h spidernet: introduce new setting 2006-05-08 16:01:11 -07:00
spider_net_ethtool.c [PATCH] spidernet: performance optimizations 2006-01-17 07:25:01 -05:00
starfire.c [PATCH] net drivers: fix section attributes for gcc 2006-04-12 18:08:45 -04:00
starfire_firmware.h
starfire_firmware.pl
stnic.c
sun3_82586.c
sun3_82586.h
sun3lance.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
sunbmac.c [PATCH] gfp_t: drivers/net 2005-10-28 08:16:51 -07:00
sunbmac.h [PATCH] gfp_t: drivers/net 2005-10-28 08:16:51 -07:00
sundance.c Merge branch 'net-const' 2006-03-03 22:22:45 -05:00
sungem.c [SUNGEM]: sem2mutex 2006-03-20 22:34:25 -08:00
sungem.h [SUNGEM]: sem2mutex 2006-03-20 22:34:25 -08:00
sungem_phy.c spidernet: enable support for bcm5461 ethernet phy 2006-05-08 16:01:12 -07:00
sungem_phy.h spidernet: enable support for bcm5461 ethernet phy 2006-05-08 16:01:12 -07:00
sunhme.c [PATCH] Sun HME: enable and map PCI ROM properly 2005-09-11 09:28:17 -07:00
sunhme.h
sunlance.c
sunqe.c
sunqe.h
tc35815.c
tg3.c [TG3]: update version and reldate 2006-06-17 21:28:28 -07:00
tg3.h [TG3]: Add recovery logic when MMIOs are re-ordered 2006-06-17 21:26:26 -07:00
tlan.c [PATCH] drivers/net/tlan.c: #ifdef CONFIG_PCI the PCI specific code 2006-02-24 00:20:08 -05:00
tlan.h
tun.c [TUN]: Fix leak in tun_get_user() 2006-03-11 18:49:13 -08:00
typhoon-firmware.h
typhoon.c [PATCH] net drivers: fix section attributes for gcc 2006-04-12 18:08:45 -04:00
typhoon.h
via-rhine.c [PATCH] via-rhine: revert "change mdelay to msleep and remove from ISR path" 2006-05-20 00:14:49 -04:00
via-velocity.c via-velocity: fix memory corruption when changing the mtu 2006-02-27 23:11:08 +01:00
via-velocity.h [PATCH] clean up inline static vs static inline 2005-07-27 16:26:20 -07:00
wd.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
yellowfin.c BUG_ON() Conversion in drivers/net/ 2006-04-02 13:52:48 +02:00
znet.c
zorro8390.c [PATCH] amiga: fix driver_register() return handling, remove zorro_module_init() 2006-03-25 08:22:53 -08:00