--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -260,19 +260,40 @@ static void ath_tx_set_retry(struct ath_
+@@ -261,19 +261,40 @@ static void ath_tx_set_retry(struct ath_
hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_RETRY);
}
ATH_TXBUF_RESET(tbf);
tbf->aphy = bf->aphy;
-@@ -1083,9 +1104,7 @@ void ath_draintxq(struct ath_softc *sc,
+@@ -1081,9 +1102,7 @@ void ath_draintxq(struct ath_softc *sc,
list_del(&bf->list);
spin_unlock_bh(&txq->axq_lock);
continue;
}
}
-@@ -1305,25 +1324,6 @@ static void ath_tx_txqaddbuf(struct ath_
+@@ -1325,25 +1344,6 @@ static void ath_tx_txqaddbuf(struct ath_
txq->axq_depth++;
}
static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid,
struct list_head *bf_head,
struct ath_tx_control *txctl)
-@@ -1805,9 +1805,7 @@ int ath_tx_start(struct ieee80211_hw *hw
+@@ -1825,9 +1825,7 @@ int ath_tx_start(struct ieee80211_hw *hw
}
spin_unlock_bh(&txq->axq_lock);
return r;
}
-@@ -2123,11 +2121,8 @@ static void ath_tx_processq(struct ath_s
+@@ -2141,13 +2139,12 @@ static void ath_tx_processq(struct ath_s
+ txq->axq_depth--;
+ txok = !(ts.ts_status & ATH9K_TXERR_MASK);
txq->axq_tx_inprogress = false;
++ if (bf_held)
++ list_del(&bf_held->list);
spin_unlock_bh(&txq->axq_lock);
- if (bf_held) {