ath9k: validate the TID in the tx status information
Felix Fietkau [Sun, 11 Jul 2010 10:48:44 +0000 (12:48 +0200)]
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>

drivers/net/wireless/ath/ath9k/xmit.c

index 05ec36a..bd52ac1 100644 (file)
@@ -355,6 +355,14 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
        an = (struct ath_node *)sta->drv_priv;
        tid = ATH_AN_2_TID(an, bf->bf_tidno);
 
+       /*
+        * The hardware occasionally sends a tx status for the wrong TID.
+        * In this case, the BA status cannot be considered valid and all
+        * subframes need to be retransmitted
+        */
+       if (bf->bf_tidno != ts->tid)
+               txok = false;
+
        isaggr = bf_isaggr(bf);
        memset(ba, 0, WME_BA_BMP_SIZE >> 3);