linux/net/mac80211
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
..
aes_ccm.c mac80211: a few code cleanups 2008-05-07 15:02:11 -04:00
aes_ccm.h mac80211: a few code cleanups 2008-05-07 15:02:11 -04:00
cfg.c mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
cfg.h [MAC80211]: rename ieee80211_cfg.h to cfg.h 2007-10-10 16:52:34 -07:00
debugfs_key.c mac80211: fix key debugfs default_key link 2008-04-08 16:46:36 -04:00
debugfs_key.h mac80211: fix key vs. sta locking problems 2008-04-08 16:44:45 -04:00
debugfs_netdev.c mac80211: a few code cleanups 2008-05-07 15:02:11 -04:00
debugfs_netdev.h [MAC80211]: Add debugfs attributes. 2007-05-05 11:46:38 -07:00
debugfs_sta.c mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
debugfs_sta.h mac80211: RCU-ify STA info structure access 2008-03-06 15:30:46 -05:00
debugfs.c mac80211: QoS related cleanups 2008-05-07 15:02:26 -04:00
debugfs.h [MAC80211]: Add debugfs attributes. 2007-05-05 11:46:38 -07:00
event.c [NET]: Introduce and use print_mac() and DECLARE_MAC_BUF() 2007-10-10 16:51:42 -07:00
ieee80211_i.h mac80211: QoS related cleanups 2008-05-07 15:02:26 -04:00
iface.c mac80211: require four hardware queues for QoS/HT 2008-05-14 16:29:33 -04:00
Kconfig wireless: Fix compile error with wifi & leds 2008-04-27 15:34:55 -07:00
key.c mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
key.h mac80211: fix key hwaccel race 2008-04-16 14:53:22 -04:00
led.c mac80211: rename files 2008-04-08 16:44:45 -04:00
led.h mac80211: rename files 2008-04-08 16:44:45 -04:00
main.c mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
Makefile mac80211: rename files 2008-04-08 16:44:45 -04:00
mesh_hwmp.c wireless: use get/put_unaligned_* helpers 2008-05-14 16:29:32 -04:00
mesh_pathtbl.c mac80211: fix mesh_path and sta_info get_by_idx functions 2008-03-06 16:40:54 -05:00
mesh_plink.c mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
mesh.c mac80211: use 4-byte mesh sequence number 2008-04-30 20:34:26 -04:00
mesh.h Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6 2008-05-01 02:06:32 -07:00
michael.c [MAC80211]: Add mac80211 wireless stack. 2007-05-05 11:45:53 -07:00
michael.h [MAC80211]: Add mac80211 wireless stack. 2007-05-05 11:45:53 -07:00
mlme.c mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
rate.c mac80211: rename files 2008-04-08 16:44:45 -04:00
rate.h mac80211: rename files 2008-04-08 16:44:45 -04:00
rc80211_pid_algo.c mac80211: rename files 2008-04-08 16:44:45 -04:00
rc80211_pid_debugfs.c mac80211: rename files 2008-04-08 16:44:45 -04:00
rc80211_pid.h rc80211-pid: fix definition of rate control interval 2008-01-28 15:00:55 -08:00
rx.c mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
sta_info.c mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
sta_info.h mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
tkip.c mac80211: tkip.c use kernel-provided infrastructure 2008-05-14 16:29:32 -04:00
tkip.h mac80211: a few code cleanups 2008-05-07 15:02:11 -04:00
tx.c mac80211: proper STA info locking 2008-05-14 16:29:34 -04:00
util.c mac80211: rename files 2008-04-08 16:44:45 -04:00
wep.c mac80211: Replace ieee80211_tx_control->key_idx with ieee80211_key_conf 2008-05-07 15:02:11 -04:00
wep.h mac80211: a few code cleanups 2008-05-07 15:02:11 -04:00
wext.c mac80211: allow WDS mode 2008-04-16 15:59:57 -04:00
wme.c mac80211: fix wme code 2008-05-07 15:15:00 -04:00
wme.h mac80211: A-MPDU Tx adding qdisc support 2008-02-29 15:19:17 -05:00
wpa.c mac80211: Replace ieee80211_tx_control->key_idx with ieee80211_key_conf 2008-05-07 15:02:11 -04:00
wpa.h mac80211: split ieee80211_txrx_data 2008-03-06 15:30:46 -05:00