|
@@ -394,7 +394,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
|
|
|
u16 seq_st = 0, acked_cnt = 0, txfail_cnt = 0, seq_first;
|
|
|
u32 ba[WME_BA_BMP_SIZE >> 5];
|
|
|
int isaggr, txfail, txpending, sendbar = 0, needreset = 0, nbad = 0;
|
|
|
- bool rc_update = true;
|
|
|
+ bool rc_update = true, isba;
|
|
|
struct ieee80211_tx_rate rates[4];
|
|
|
struct ath_frame_info *fi;
|
|
|
int nframes;
|
|
@@ -438,13 +438,17 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
|
|
|
tidno = ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
|
|
|
tid = ATH_AN_2_TID(an, tidno);
|
|
|
seq_first = tid->seq_start;
|
|
|
+ isba = ts->ts_flags & ATH9K_TX_BA;
|
|
|
|
|
|
/*
|
|
|
* 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
|
|
|
+ *
|
|
|
+ * Only BlockAcks have a TID and therefore normal Acks cannot be
|
|
|
+ * checked
|
|
|
*/
|
|
|
- if (tidno != ts->tid)
|
|
|
+ if (isba && tidno != ts->tid)
|
|
|
txok = false;
|
|
|
|
|
|
isaggr = bf_isaggr(bf);
|