aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-07-11 06:48:44 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-07-12 16:05:38 -0400
commitb11b160defc48e4daa283f785192ea3a23a51f8e (patch)
treeb42a7d59290568ddb9b346cae98d04b875d28472 /drivers
parente5cbef96cf8bf9967605a1b75b115f4b7efa7bc4 (diff)
ath9k: validate the TID in the tx status information
Occasionally the hardware can send out tx status information with the wrong TID. In that case, the BA status cannot be trusted and the aggregate must be retransmitted. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/ath9k/xmit.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
index 05ec36ac55f5..bd52ac111795 100644
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
@@ -355,6 +355,14 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
355 an = (struct ath_node *)sta->drv_priv; 355 an = (struct ath_node *)sta->drv_priv;
356 tid = ATH_AN_2_TID(an, bf->bf_tidno); 356 tid = ATH_AN_2_TID(an, bf->bf_tidno);
357 357
358 /*
359 * The hardware occasionally sends a tx status for the wrong TID.
360 * In this case, the BA status cannot be considered valid and all
361 * subframes need to be retransmitted
362 */
363 if (bf->bf_tidno != ts->tid)
364 txok = false;
365
358 isaggr = bf_isaggr(bf); 366 isaggr = bf_isaggr(bf);
359 memset(ba, 0, WME_BA_BMP_SIZE >> 3); 367 memset(ba, 0, WME_BA_BMP_SIZE >> 3);
360 368