remarkable-linux/net/mac80211
Johannes Berg e3685e03b4 mac80211: fix station wakeup powersave race
Consider the following (relatively unlikely) scenario:
 1) station goes to sleep while frames are buffered in driver
 2) driver blocks wakeup (until no more frames are buffered)
 3) station wakes up again
 4) driver unblocks wakeup

In this case, the current mac80211 code will do the following:
 1) WLAN_STA_PS_STA set
 2) WLAN_STA_PS_DRIVER set
 3) - nothing -
 4) WLAN_STA_PS_DRIVER cleared

As a result, no frames will be delivered to the client, even
though it is awake, until it sends another frame to us that
triggers ieee80211_sta_ps_deliver_wakeup() in sta_ps_end().

Since we now take the PS spinlock, we can fix this while at
the same time removing the complexity with the pending skb
queue function. This was broken since my commit 50a9432dae
("mac80211: fix powersaving clients races") due to removing
the clearing of WLAN_STA_PS_STA in the RX path.

While at it, fix a cleanup path issue when a station is
removed while the driver is still blocking its wakeup.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
2014-02-20 11:54:09 +01:00
..
aes_ccm.c mac80211: port CCMP to cryptoapi's CCM driver 2013-10-11 15:38:20 +02:00
aes_ccm.h mac80211: port CCMP to cryptoapi's CCM driver 2013-10-11 15:38:20 +02:00
aes_cmac.c mac80211: fix checkpatch errors 2013-12-18 10:33:06 +01:00
aes_cmac.h mac80211: fix checkpatch errors 2013-12-18 10:33:06 +01:00
agg-rx.c
agg-tx.c
cfg.c mac80211: release the channel in error path in start_ap 2014-02-06 09:55:20 +01:00
cfg.h
chan.c mac80211: fix iflist_mtx/mtx locking in radar detection 2013-12-19 13:33:33 +01:00
debug.h mac80211: process the CSA frame for mesh accordingly 2013-10-28 15:05:28 +01:00
debugfs.c mac80211: Tx frame latency statistics 2013-12-02 11:51:50 +01:00
debugfs.h
debugfs_key.c
debugfs_key.h
debugfs_netdev.c mac80211: sync dtim_count to TSF 2014-01-06 20:10:47 +01:00
debugfs_netdev.h
debugfs_sta.c mac80211: Tx frame latency statistics 2013-12-02 11:51:50 +01:00
debugfs_sta.h
driver-ops.h mac80211: add pre-RCU-sync sta removal driver operation 2013-12-16 11:29:44 +01:00
event.c
ht.c mac80211: avoid deadlock revealed by lockdep 2014-02-06 09:55:18 +01:00
ibss.c mac80211: Fix IBSS disconnect 2014-02-06 09:55:20 +01:00
ieee80211_i.h mac80211: fix station wakeup powersave race 2014-02-20 11:54:09 +01:00
iface.c mac80211: fix virtual monitor interface iteration 2014-02-06 09:55:22 +01:00
Kconfig mac80211: process the CSA frame for mesh accordingly 2013-10-28 15:05:28 +01:00
key.c mac80211: free all AP/VLAN keys at once 2013-12-16 11:29:48 +01:00
key.h mac80211: free all AP/VLAN keys at once 2013-12-16 11:29:48 +01:00
led.c
led.h
main.c mac80211: fix memory leak in register_hw() error path 2014-01-06 16:02:34 +01:00
Makefile
mesh.c mac80211: sync dtim_count to TSF 2014-01-06 20:10:47 +01:00
mesh.h mac80211: use put_unaligned_le in mesh when necessary 2013-11-25 20:51:55 +01:00
mesh_hwmp.c mac80211: use put_unaligned_le in mesh when necessary 2013-11-25 20:51:55 +01:00
mesh_pathtbl.c mac80211: use put_unaligned_le in mesh when necessary 2013-11-25 20:51:55 +01:00
mesh_plink.c mac80211: enable WME for peer mesh STA 2014-01-06 17:43:06 +01:00
mesh_ps.c mac80211: use put_unaligned_le16 in mesh_plink_frame_tx 2013-11-25 20:51:53 +01:00
mesh_sync.c mac80211: update adjusting TBTT bit in beacon 2013-12-16 14:21:22 +01:00
michael.c
michael.h
mlme.c mac80211: fix memory leak 2014-02-11 12:59:36 +01:00
offchannel.c mac80211: Run deferred scan if last roc_list item is not started 2013-09-30 12:36:56 +02:00
pm.c mac80211: don't delay station destruction 2013-12-16 11:29:45 +01:00
rate.c mac80211: respect rate mask in TX 2013-10-15 15:16:29 +02:00
rate.h Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next 2013-12-02 14:25:38 -05:00
rc80211_minstrel.c mac80211: fix checkpatch errors 2013-12-18 10:33:06 +01:00
rc80211_minstrel.h
rc80211_minstrel_debugfs.c
rc80211_minstrel_ht.c mac80211: fix checkpatch errors 2013-12-18 10:33:06 +01:00
rc80211_minstrel_ht.h
rc80211_minstrel_ht_debugfs.c mac80211: minstrel_ht: replace some occurences of MCS_GROUP_RATES 2013-11-25 20:52:07 +01:00
rc80211_pid.h
rc80211_pid_algo.c
rc80211_pid_debugfs.c mac80211: fix some snprintf misuses 2013-10-01 12:16:51 +02:00
rx.c mac80211: fix station wakeup powersave race 2014-02-20 11:54:09 +01:00
scan.c mac80211: reschedule sched scan after HW restart 2013-12-16 13:47:26 +01:00
spectmgmt.c mac80211: fix the mesh channel switch support 2013-11-25 16:50:13 +01:00
sta_info.c mac80211: fix station wakeup powersave race 2014-02-20 11:54:09 +01:00
sta_info.h mac80211: fix AP powersave TX vs. wakeup race 2014-02-20 10:32:29 +01:00
status.c mac80211: Tx frame latency statistics 2013-12-02 11:51:50 +01:00
tkip.c mac80211: fix checkpatch errors 2013-12-18 10:33:06 +01:00
tkip.h
trace.c
trace.h mac80211: add tracing for ieee80211_sta_set_buffered 2014-01-06 12:09:01 +01:00
tx.c mac80211: fix AP powersave TX vs. wakeup race 2014-02-20 10:32:29 +01:00
util.c mac80211: fix station wakeup powersave race 2014-02-20 11:54:09 +01:00
vht.c mac80211: enable easier manipulation of VHT beamforming caps 2013-11-25 20:52:01 +01:00
wep.c
wep.h
wme.c mac80211: send control port protocol frames to the VO queue 2014-02-12 11:26:43 +01:00
wme.h
wpa.c mac80211: clean up garbage in comment 2014-01-07 16:21:56 +01:00
wpa.h mac80211: add generic cipher scheme support 2013-11-25 20:50:52 +01:00