summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/rc.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-05-18 21:28:15 +0200
committerJohn W. Linville <linville@tuxdriver.com>2013-05-22 14:28:44 -0400
commit08c96abd611beadf2af414a306fe0fb02ba706ff (patch)
tree2ee91910a79083004eacad4a05fe0699d4a7e534 /drivers/net/wireless/ath/ath9k/rc.c
parent323a98db4d51e4fefc74290adfb5493047cbbe22 (diff)
downloadlinux-08c96abd611beadf2af414a306fe0fb02ba706ff.tar.gz
linux-08c96abd611beadf2af414a306fe0fb02ba706ff.tar.bz2
linux-08c96abd611beadf2af414a306fe0fb02ba706ff.zip
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>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/rc.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/rc.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
index aa4d368d8d3d..7eb1f4b458e4 100644
--- a/drivers/net/wireless/ath/ath9k/rc.c
+++ b/drivers/net/wireless/ath/ath9k/rc.c
@@ -1227,10 +1227,7 @@ static bool ath_tx_aggr_check(struct ath_softc *sc, struct ieee80211_sta *sta,
return false;
txtid = ATH_AN_2_TID(an, tidno);
-
- if (!(txtid->state & (AGGR_ADDBA_COMPLETE | AGGR_ADDBA_PROGRESS)))
- return true;
- return false;
+ return !txtid->active;
}