]> Git Repo - linux.git/commitdiff
ath9k: fix aggregation session lockup
authorFelix Fietkau <[email protected]>
Wed, 23 Jul 2014 13:40:54 +0000 (15:40 +0200)
committerJohn W. Linville <[email protected]>
Wed, 23 Jul 2014 17:03:11 +0000 (13:03 -0400)
If an aggregation session fails, frames still end up in the driver queue
with IEEE80211_TX_CTL_AMPDU set.
This causes tx for the affected station/tid to stall, since
ath_tx_get_tid_subframe returning packets to send.

Fix this by clearing IEEE80211_TX_CTL_AMPDU as long as no aggregation
session is running.

Cc: [email protected]
Reported-by: Antonio Quartulli <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
drivers/net/wireless/ath/ath9k/xmit.c

index 66acb2cbd9df3cc45c307bb6b38118436da3d01a..7c28cb55610b377a1a3651b54c901f9c9ec97f97 100644 (file)
@@ -887,6 +887,15 @@ ath_tx_get_tid_subframe(struct ath_softc *sc, struct ath_txq *txq,
 
                tx_info = IEEE80211_SKB_CB(skb);
                tx_info->flags &= ~IEEE80211_TX_CTL_CLEAR_PS_FILT;
+
+               /*
+                * No aggregation session is running, but there may be frames
+                * from a previous session or a failed attempt in the queue.
+                * Send them out as normal data frames
+                */
+               if (!tid->active)
+                       tx_info->flags &= ~IEEE80211_TX_CTL_AMPDU;
+
                if (!(tx_info->flags & IEEE80211_TX_CTL_AMPDU)) {
                        bf->bf_state.bf_type = 0;
                        return bf;
This page took 0.060759 seconds and 4 git commands to generate.