ath9k: prevent aggregation session deadlocks
authorFelix Fietkau <nbd@openwrt.org>
Sat, 18 May 2013 19:28:15 +0000 (21:28 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 22 May 2013 18:28:44 +0000 (14:28 -0400)
commit08c96abd611beadf2af414a306fe0fb02ba706ff
tree2ee91910a79083004eacad4a05fe0699d4a7e534
parent323a98db4d51e4fefc74290adfb5493047cbbe22
ath9k: prevent aggregation session deadlocks

Waiting for all subframes of an existing aggregation session to drain
before allowing mac80211 to start a new one is fragile and deadlocks
caused by this behavior have been observed.

Since mac80211 has proper synchronization for aggregation session
start/stop handling, a better approach to session handling is to simply
allow mac80211 to start a new session at any time. This requires
changing the code to discard any packets outside of the BlockAck window
in the A-MPDU software retry code.

This patch implements the above and also simplifies the code.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/ath9k.h
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/ath9k/rc.c
drivers/net/wireless/ath/ath9k/xmit.c