linux/drivers/net
Johannes Berg 07346f81e8 mac80211: proper STA info locking
As discussed earlier, we can unify locking in struct sta_info
and use just a single spinlock protecting all members of the
structure that need protection. Many don't, but one of the
especially bad ones is the 'flags' member that can currently
be clobbered when RX and TX is being processed on different
CPUs at the same time.

Because having four spinlocks for different, mostly exclusive
parts of a single structure is overkill, this patch also kills
the ampdu and mesh plink spinlocks and uses just a single one
for everything. Because none of the spinlocks are nested, this
is safe.

It remains to be seen whether or not we should make the sta
flags use atomic bit operations instead, for now though this
is a safe thing and using atomic operations instead will be
very simple using the new static inline functions this patch
introduces for accessing sta->flags.

Since spin_lock_bh() is used with this lock, there shouldn't
be any contention even if aggregation is enabled at around the
same time as both requires frame transmission/reception which
is in a bh context.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Cc: Tomas Winkler <tomasw@gmail.com>
Cc: Ron Rindjunsky <ron.rindjunsky@intel.com>
Cc: Luis Carlos Cobo <luisca@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2008-05-14 16:29:34 -04:00
..
appletalk drivers/net/appletalk: use time_before, time_before_eq, etc 2008-04-19 18:15:41 -07:00
arcnet drivers/net/arcnet/arcnet.c: use time_* macros 2008-03-28 22:14:15 -04:00
arm Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-04-30 08:45:48 -07:00
atlx [netdrvr] atlx: code movement: move atl1 parameter parsing 2008-04-25 02:08:52 -04:00
bonding netdev: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
can
chelsio annotate chelsio 2008-01-28 15:10:29 -08:00
cris CRIS v10: drivers/net/cris/eth_v10.c rename LED defines to CRIS_LED to avoid name clash. 2008-02-08 11:16:44 +01:00
cxgb3 RDMA/cxgb3: Support peer-2-peer connection setup 2008-04-29 13:46:52 -07:00
e1000 e1000: convert uint16_t style integers to u16 2008-04-16 20:41:45 -04:00
e1000e e1000e: Increment version to 0.2.1 2008-04-25 02:08:05 -04:00
ehea ehea: make things static 2008-04-25 02:08:53 -04:00
fec_8xx
fs_enet phy: Change mii_bus id field to a string 2008-04-16 20:09:35 -04:00
hamradio 6pack: use netstats in net_device structure 2008-05-13 01:35:24 -04:00
ibm_emac
ibm_newemac ibm_newemac: Increase MDIO timeouts 2008-04-25 02:08:56 -04:00
igb igb: save and restore pcie/msi state to support EEH recovery 2008-04-25 02:08:04 -04:00
irda tty: The big operations rework 2008-04-30 08:29:47 -07:00
ixgb ixgb: convert uint16_t style integers to u16 2008-04-16 20:41:44 -04:00
ixgbe ixgbe: save and restore pcie/msi state to support EEH recovery 2008-04-25 02:07:13 -04:00
ixp2000
mlx4 mlx4_core: Avoid recycling old FMR R_Keys too soon 2008-04-29 13:46:53 -07:00
myri10ge Remove duplicated unlikely() in IS_ERR() 2008-04-29 08:06:25 -07:00
netxen Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-04-25 12:28:28 -07:00
pcmcia 3c589_cs: use netstats in net_device structure 2008-05-13 01:35:24 -04:00
phy Add support for SMSC LAN8187 and LAN8700 PHYs 2008-04-29 01:55:59 -04:00
sfc New driver "sfc" for Solarstorm SFC4000 controller. 2008-04-29 01:42:43 -04:00
skfp skfp annotations 2008-03-26 00:18:44 -04:00
tokenring 3c359: use netstats in net_device structure 2008-05-13 01:35:25 -04:00
tulip net: use get/put_unaligned_* helpers 2008-04-29 08:06:27 -07:00
usb net: Remove unnecessary inclusions of asm/semaphore.h 2008-04-18 22:15:50 -04:00
wan tty: The big operations rework 2008-04-30 08:29:47 -07:00
wireless mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
3c59x.c
3c501.c 3c501: Further coding style fixes 2008-03-17 08:11:03 -04:00
3c501.h
3c503.c
3c503.h
3c505.c 3c505: use netstats in net_device structure 2008-04-29 01:55:11 -04:00
3c505.h 3c505: use netstats in net_device structure 2008-04-29 01:55:11 -04:00
3c507.c
3c509.c 3c509: use netstats in net_device structure 2008-04-29 01:55:12 -04:00
3c515.c 3c515: use netstats in net_device structure 2008-04-29 01:55:14 -04:00
3c523.c 3c523: use netstats in net_device structure 2008-05-13 01:35:24 -04:00
3c523.h
3c527.c 3c527: use netstats in net_device structure 2008-05-13 01:35:25 -04:00
3c527.h
7990.c NULL noise in drivers/net 2008-01-28 15:07:12 -08:00
7990.h
8139cp.c 8139cp: use netstats in net_device structure 2008-05-13 01:35:23 -04:00
8139too.c 8139too: use netstats in net_device structure 2008-05-13 01:35:24 -04:00
8390.c net: fix returning void-valued expression warnings 2008-05-01 02:47:38 -07:00
8390.h 8390.h: remove net_device_stats 2008-05-13 01:35:23 -04:00
82596.c
Kconfig Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-04-30 08:45:48 -07:00
LICENSE.SRC
Makefile Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-04-30 08:45:48 -07:00
Space.c
a2065.c NULL noise in drivers/net 2008-01-28 15:07:12 -08:00
a2065.h
ac3200.c drivers/net/ac3200.c: replace init_module&cleanup_module with module_init&module_exit 2008-03-05 18:50:41 -08:00
acenic.c acenic: use netstats in net_device structure 2008-05-13 01:35:24 -04:00
acenic.h acenic: use netstats in net_device structure 2008-05-13 01:35:24 -04:00
acenic_firmware.h
amd8111e.c
amd8111e.h
apne.c drivers/net/apne.c: replace init_module&cleanup_module with module_init&module_exit 2008-03-05 18:50:16 -08:00
ariadne.c
ariadne.h
at1700.c /drivers/net/at1700.c replaced init_module&cleanup_module with module_init&module_exit 2008-03-17 07:49:27 -04:00
atarilance.c /drivers/net/atarilance.c replaced init_module&cleanup_module with module_init&module_exit 2008-03-17 07:49:28 -04:00
atp.c misc drivers/net annotations 2008-03-26 00:18:43 -04:00
atp.h
au1000_eth.c phy: Change mii_bus id field to a string 2008-04-16 20:09:35 -04:00
au1000_eth.h
ax88796.c net drivers: fix platform driver hotplug/coldplug 2008-04-25 02:08:54 -04:00
b44.c ssb: Fix usage of struct device used for DMAing 2008-04-15 15:04:35 -04:00
b44.h
bfin_mac.c Blackfin EMAC Driver: Initial version of ethtool support 2008-04-29 01:56:24 -04:00
bfin_mac.h Blackfin EMAC Driver: code cleanup 2008-04-29 01:56:14 -04:00
bmac.c
bmac.h
bnx2.c bnx2: Update version to 1.7.5. 2008-05-02 16:58:18 -07:00
bnx2.h [BNX2]: Disable parallel detect on an HP blade. 2008-02-23 19:48:57 -08:00
bnx2_fw.h [BNX2]: Update firmware. 2008-01-31 19:27:17 -08:00
bnx2_fw2.h bnx2: Update RV2P firmware for 5709. 2008-05-02 16:57:59 -07:00
bnx2x.c BNX2X: Correct bringing chip out of reset 2008-04-09 15:25:46 -07:00
bnx2x.h [BNX2X]: Fix Xmit bugs 2008-02-28 11:57:55 -08:00
bnx2x_fw_defs.h [BNX2X]: Correct Link management 2008-02-28 11:51:50 -08:00
bnx2x_hsi.h [BNX2X]: Correct Link management 2008-02-28 11:51:50 -08:00
bnx2x_init.h [BNX2X]: Prevent PCI queue overflow 2008-02-28 11:57:29 -08:00
bnx2x_init_values.h
bnx2x_reg.h [BNX2X]: Correct Link management 2008-02-28 11:51:50 -08:00
bsd_comp.c
cassini.c [CASSINI]: Use shorter list_splice_init() macro for brevity. 2008-03-23 22:47:53 -07:00
cassini.h
cpmac.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
cs89x0.c drivers/net/cs89x0.c: compilation warning fix 2008-02-23 23:55:05 -05:00
cs89x0.h
de600.c
de600.h
de620.c
de620.h
declance.c
defxx.c misc drivers/net annotations 2008-03-26 00:18:43 -04:00
defxx.h
depca.c
depca.h
dl2k.c
dl2k.h Fix dl2k constants 2008-02-01 20:54:03 +11:00
dm9000.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
dm9000.h
dummy.c
e100.c net: use get/put_unaligned_* helpers 2008-04-29 08:06:27 -07:00
e2100.c
eepro.c net: eepro autoport typo 2008-04-29 01:56:01 -04:00
eepro100.c eepro100 annotations 2008-01-28 15:07:59 -08:00
eexpress.c MAINTAINERS: remove Adam Fritzler, remove his email address in other sources 2008-02-03 16:36:24 +02:00
eexpress.h
enc28j60.c net/enc28j60: oops fix 2008-03-05 18:51:19 -08:00
enc28j60_hw.h add driver for enc28j60 ethernet chip 2008-01-28 15:08:03 -08:00
epic100.c epic100 endianness annotations and fixes 2008-03-17 07:56:38 -04:00
eql.c
es3210.c
eth16i.c
ewrk3.c
ewrk3.h
fealnx.c
fec.c m68knommu: fix FEC driver locking 2008-05-01 08:08:36 -07:00
fec.h m68knommu: fix ColdFire 5272 fec driver hash registers 2008-05-01 08:08:36 -07:00
fec_mpc52xx.c [POWERPC] mpc5200: Allow for fixed speed MII configurations 2008-05-01 11:05:58 -06:00
fec_mpc52xx.h [POWERPC] mpc5200: Allow for fixed speed MII configurations 2008-05-01 11:05:58 -06:00
fec_mpc52xx_phy.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2008-04-17 23:56:30 -07:00
forcedeth.c forcedeth: realtek phy crossover detection 2008-04-25 02:08:57 -04:00
gianfar.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
gianfar.h [netdrvr] gianfar: Determine TBIPA value dynamically 2008-04-29 01:57:57 -04:00
gianfar_ethtool.c
gianfar_mii.c [netdrvr] gianfar: Determine TBIPA value dynamically 2008-04-29 01:57:57 -04:00
gianfar_mii.h [netdrvr] gianfar: Determine TBIPA value dynamically 2008-04-29 01:57:57 -04:00
gianfar_sysfs.c
hamachi.c net: use get/put_unaligned_* helpers 2008-04-29 08:06:27 -07:00
hp-plus.c
hp.c
hp100.c NULL noise in drivers/net 2008-01-28 15:07:12 -08:00
hp100.h
hplance.c
hplance.h
hydra.c
ibmlana.c ibmlana_init_one() must be __devinit 2008-02-03 04:26:12 -08:00
ibmlana.h
ibmveth.c netdev: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
ibmveth.h
ifb.c [NET] ifb: set separate lockdep classes for queue locks 2008-03-20 17:05:13 -07:00
ioc3-eth.c [IOC3] Fix section missmatch 2008-03-17 08:11:41 -04:00
ipg.c drivers/net/ipg.c: remove unused variable 2008-03-17 07:56:42 -04:00
ipg.h ipg: fix checkpatch reported errors 2008-01-28 15:05:53 -08:00
isa-skeleton.c
iseries_veth.c [POWERPC] properly declare onstack completion in iseries veth 2008-04-17 07:46:11 +10:00
jazzsonic.c net drivers: fix platform driver hotplug/coldplug 2008-04-25 02:08:54 -04:00
korina.c korina: misc cleanup 2008-04-25 02:08:51 -04:00
lance.c
lasi_82596.c
lib8390.c drivers/net/lib8390: fix warning, trim trailing whitespace 2008-05-13 01:41:28 -04:00
lib82596.c
lne390.c
loopback.c [NET] NETNS: Omit net_device->nd_net without CONFIG_NET_NS. 2008-03-26 04:39:53 +09:00
lp486e.c
mac89x0.c NULL noise in drivers/net 2008-01-28 15:07:12 -08:00
mac8390.c
macb.c net drivers: fix platform driver hotplug/coldplug 2008-04-25 02:08:54 -04:00
macb.h
mace.c NULL noise in drivers/net 2008-01-28 15:07:12 -08:00
mace.h
macmace.c
macsonic.c
macvlan.c [NET] NETNS: Omit net_device->nd_net without CONFIG_NET_NS. 2008-03-26 04:39:53 +09:00
meth.c net drivers: fix platform driver hotplug/coldplug 2008-04-25 02:08:54 -04:00
meth.h
mii.c
mipsnet.c Fix/Rewrite of the mipsnet driver] 2008-02-03 04:28:10 -08:00
mv643xx_eth.c net drivers: fix platform driver hotplug/coldplug 2008-04-25 02:08:54 -04:00
mvme147.c
myri_code.h
myri_sbus.c
myri_sbus.h
natsemi.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
ne-h8300.c
ne.c
ne2.c
ne2k-pci.c more misannotations: ne2k-pci 2008-03-17 07:56:33 -04:00
ne3210.c
netconsole.c netconsole: only set CON_PRINTBUFFER if the user specifies a netconsole 2008-04-15 00:49:04 -07:00
netx-eth.c net drivers: fix platform driver hotplug/coldplug 2008-04-25 02:08:54 -04:00
ni52.c ni52: more unbreaking 2008-03-26 00:18:04 -04:00
ni52.h ni52: unbreak scp_struct 2008-03-26 00:18:00 -04:00
ni65.c
ni65.h
ni5010.c
ni5010.h
niu.c niu: Add support for Neptune FEM/NEM cards for C10 server blades 2008-04-24 21:09:20 -07:00
niu.h [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
ns83820.c NET: ns83820.c remove fastcall macro 2008-01-28 15:07:56 -08:00
pasemi_mac.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2008-04-21 15:50:49 -07:00
pasemi_mac.h pasemi_mac: basic ethtool support 2008-03-05 16:34:41 -06:00
pasemi_mac_ethtool.c pasemi_mac: basic ethtool support 2008-03-05 16:34:41 -06:00
pci-skeleton.c pci-skeleton: Misc fixes to build neatly 2008-02-03 04:28:43 -08:00
pcnet32.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
plip.c plip: replace spin_lock_irq with spin_lock_irqsave in irq context 2008-04-01 11:16:04 -07:00
ppp_async.c tty: add throttle/unthrottle helpers 2008-04-30 08:29:47 -07:00
ppp_deflate.c [PPP]: Sparse warning fixes. 2008-01-28 15:11:27 -08:00
ppp_generic.c ppp_generic: use stats from net_device structure 2008-04-23 18:54:01 -07:00
ppp_mppe.c
ppp_mppe.h
ppp_synctty.c tty: add throttle/unthrottle helpers 2008-04-30 08:29:47 -07:00
pppoe.c netdev: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
pppol2tp.c netdev: use non-racy method for proc entries creation 2008-04-29 08:06:22 -07:00
pppox.c
ps3_gelic_net.c [POWERPC] PS3: Gelic network driver Wake-on-LAN support 2008-04-01 20:43:08 +11:00
ps3_gelic_net.h [POWERPC] PS3: Gelic network driver Wake-on-LAN support 2008-04-01 20:43:08 +11:00
ps3_gelic_wireless.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2008-04-17 23:56:30 -07:00
ps3_gelic_wireless.h PS3: gelic: Add wireless support for PS3 2008-02-11 10:30:05 -05:00
qla3xxx.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
qla3xxx.h qla3xxx annotations 2008-01-28 15:08:00 -08:00
r6040.c r6040 endianness fixes 2008-03-17 07:56:27 -04:00
r8169.c r8169: fix oops in r8169_get_mac_version 2008-04-17 22:48:41 +02:00
rionet.c [RAPIDIO] Auto-probe the RapidIO system size 2008-04-29 19:40:28 +10:00
rrunner.c
rrunner.h
s2io-regs.h
s2io.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
s2io.h [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
saa9730.c
saa9730.h
sb1000.c sb1000.c: make const arrays static 2008-04-16 20:41:44 -04:00
sb1250-mac.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
sc92031.c sc92031: use netdev_alloc_skb 2008-04-16 20:41:35 -04:00
seeq8005.c
seeq8005.h
sgiseeq.c net drivers: fix platform driver hotplug/coldplug 2008-04-25 02:08:54 -04:00
sgiseeq.h
sis190.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
sis900.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
sis900.h
skge.c netxen, phy/marvell, skge: minor checkpatch fixes 2008-03-25 23:53:24 -04:00
skge.h
sky2.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
sky2.h sky2: fix LED management 2008-02-24 00:07:39 -05:00
slhc.c [PPP]: Sparse warning fixes. 2008-01-28 15:11:27 -08:00
slip.c tty: The big operations rework 2008-04-30 08:29:47 -07:00
slip.h
smc-mca.c
smc-ultra.c
smc-ultra32.c
smc91x.c net drivers: fix platform driver hotplug/coldplug 2008-04-25 02:08:54 -04:00
smc91x.h Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2008-04-17 23:56:30 -07:00
smc911x.c smc911x: test after postfix decrement fails in smc911x_{reset,drop_pkt} 2008-04-25 02:08:55 -04:00
smc911x.h
smc9194.c
smc9194.h
sni_82596.c net drivers: fix platform driver hotplug/coldplug 2008-04-25 02:08:54 -04:00
sonic.c
sonic.h
spider_net.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
spider_net.h spidernet: change interrupt masks 2008-04-16 20:06:50 -04:00
spider_net_ethtool.c
starfire.c [NET]: Undo code bloat in hot paths due to print_mac(). 2008-04-08 16:50:44 -07:00
starfire_firmware.h
starfire_firmware.pl
stnic.c
sun3_82586.c
sun3_82586.h
sun3lance.c
sunbmac.c net/sunbmac.c section fix 2008-02-03 04:26:15 -08:00
sunbmac.h
sundance.c
sungem.c [SUNGEM]: Fix NAPI assertion failure. 2008-03-23 03:35:12 -07:00
sungem.h sungem endianness annotations 2008-01-28 15:07:10 -08:00
sungem_phy.c
sungem_phy.h
sunhme.c NULL noise in drivers/net 2008-01-28 15:07:12 -08:00
sunhme.h sunhme endianness annotations 2008-01-28 15:07:09 -08:00
sunlance.c
sunqe.c net/sunqe.c section fix 2008-02-03 04:26:14 -08:00
sunqe.h
sunvnet.c drivers/net/sunvnet.c:print_version() must be __devinit 2008-02-03 04:26:13 -08:00
sunvnet.h
tc35815.c tc35815: Statistics cleanup 2008-04-17 15:31:31 -04:00
tehuti.c drivers/net/tehuti: use proper capability check for raw IO access 2008-04-29 11:45:16 -07:00
tehuti.h
tehuti_fw.h
tg3.c tg3: Update version to 3.92 2008-05-02 16:49:50 -07:00
tg3.h tg3: Add link state reporting to UMP firmware 2008-05-02 16:49:29 -07:00
tlan.c tlan: add static to function definitions 2008-02-23 23:57:46 -05:00
tlan.h
tsi108_eth.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
tsi108_eth.h
tun.c tun: Multicast handling in tun_chr_ioctl() needs proper locking. 2008-04-24 03:44:43 -07:00
typhoon-firmware.h
typhoon.c [netdrvr] typhoon: typhoon_resume - remove call to start_queue 2008-04-25 02:08:08 -04:00
typhoon.h
ucc_geth.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-04-25 12:28:28 -07:00
ucc_geth.h phy: Change mii_bus id field to a string 2008-04-16 20:09:35 -04:00
ucc_geth_ethtool.c [netdrvr] Trim trailing whitespace for several drivers 2008-05-13 01:41:58 -04:00
ucc_geth_mii.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2008-04-21 15:50:49 -07:00
ucc_geth_mii.h
veth.c [NET] NETNS: Omit net_device->nd_net without CONFIG_NET_NS. 2008-03-26 04:39:53 +09:00
via-rhine.c [netdrvr] via-rhine: Use register offset definition for WOLcgClr 2008-02-24 00:07:37 -05:00
via-velocity.c via-velocity: fix vlan receipt 2008-04-25 02:45:23 -04:00
via-velocity.h big-endian support for via-velocity 2008-02-03 04:26:27 -08:00
virtio_net.c virtio: explicit advertisement of driver features 2008-05-02 21:50:50 +10:00
wd.c
xen-netfront.c net: fix returning void-valued expression warnings 2008-05-01 02:47:38 -07:00
yellowfin.c net: use get/put_unaligned_* helpers 2008-04-29 08:06:27 -07:00
znet.c
zorro8390.c