txq = tid->txq;
ath_txq_lock(sc, txq);
-@@ -1567,13 +1576,9 @@ void ath_tx_aggr_sleep(struct ieee80211_
+@@ -1567,13 +1576,12 @@ void ath_tx_aggr_sleep(struct ieee80211_
continue;
}
- buffered = ath_tid_has_buffered(tid);
--
++ if (!skb_queue_empty(&tid->retry_q))
++ ieee80211_sta_set_buffered(sta, tid->tidno, true);
+
list_del_init(&tid->list);
ath_txq_unlock(sc, txq);
}
}
-@@ -1586,19 +1591,12 @@ void ath_tx_aggr_wakeup(struct ath_softc
+@@ -1586,19 +1594,16 @@ void ath_tx_aggr_wakeup(struct ath_softc
ath_dbg(common, XMIT, "%s called\n", __func__);
ath_txq_lock(sc, txq);
tid->clear_ps_filter = true;
-
-- if (ath_tid_has_buffered(tid)) {
-- ath_tx_queue_tid(sc, txq, tid);
-- ath_txq_schedule(sc, txq);
-- }
+ if (ath_tid_has_buffered(tid)) {
+ ath_tx_queue_tid(sc, txq, tid);
+ ath_txq_schedule(sc, txq);
+ }
-
ath_txq_unlock_complete(sc, txq);
}
}
-@@ -1621,11 +1619,6 @@ void ath_tx_aggr_resume(struct ath_softc
+@@ -1621,11 +1626,6 @@ void ath_tx_aggr_resume(struct ath_softc
tid->baw_size = IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor;
ath_txq_unlock_complete(sc, txq);
}
-@@ -1641,7 +1634,6 @@ void ath9k_release_buffered_frames(struc
+@@ -1641,7 +1641,6 @@ void ath9k_release_buffered_frames(struc
struct ieee80211_tx_info *info;
struct list_head bf_q;
struct ath_buf *bf_tail = NULL, *bf;
int sent = 0;
int i;
-@@ -1656,11 +1648,10 @@ void ath9k_release_buffered_frames(struc
+@@ -1656,11 +1655,10 @@ void ath9k_release_buffered_frames(struc
ath_txq_lock(sc, tid->txq);
while (nframes > 0) {
list_add_tail(&bf->list, &bf_q);
ath_set_rates(tid->an->vif, tid->an->sta, bf, true);
if (bf_isampdu(bf)) {
-@@ -1675,7 +1666,7 @@ void ath9k_release_buffered_frames(struc
+@@ -1675,7 +1673,7 @@ void ath9k_release_buffered_frames(struc
sent++;
TX_STAT_INC(txq->axq_qnum, a_queued_hw);
ieee80211_sta_set_buffered(an->sta, i, false);
}
ath_txq_unlock_complete(sc, tid->txq);
-@@ -1902,13 +1893,7 @@ bool ath_drain_all_txq(struct ath_softc
+@@ -1902,13 +1900,7 @@ bool ath_drain_all_txq(struct ath_softc
if (!ATH_TXQ_SETUP(sc, i))
continue;
ath_draintxq(sc, txq);
}
-@@ -2308,15 +2293,12 @@ int ath_tx_start(struct ieee80211_hw *hw
+@@ -2308,15 +2300,12 @@ int ath_tx_start(struct ieee80211_hw *hw
struct ath_txq *txq = txctl->txq;
struct ath_atx_tid *tid = NULL;
struct ath_buf *bf;
ps_resp = !!(info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE);
ret = ath_tx_prepare(hw, skb, txctl);
-@@ -2331,63 +2313,13 @@ int ath_tx_start(struct ieee80211_hw *hw
+@@ -2331,63 +2320,13 @@ int ath_tx_start(struct ieee80211_hw *hw
q = skb_get_queue_mapping(skb);
}
bf = ath_tx_setup_buffer(sc, txq, tid, skb);
-@@ -2871,9 +2803,8 @@ void ath_tx_node_init(struct ath_softc *
+@@ -2871,9 +2810,8 @@ void ath_tx_node_init(struct ath_softc *
struct ath_atx_tid *tid;
int tidno, acno;
tid->an = an;
tid->tidno = tidno;
tid->seq_start = tid->seq_next = 0;
-@@ -2881,11 +2812,14 @@ void ath_tx_node_init(struct ath_softc *
+@@ -2881,11 +2819,14 @@ void ath_tx_node_init(struct ath_softc *
tid->baw_head = tid->baw_tail = 0;
tid->active = false;
tid->clear_ps_filter = true;
}
}
-@@ -2895,9 +2829,8 @@ void ath_tx_node_cleanup(struct ath_soft
+@@ -2895,9 +2836,8 @@ void ath_tx_node_cleanup(struct ath_soft
struct ath_txq *txq;
int tidno;
txq = tid->txq;
ath_txq_lock(sc, txq);
-@@ -2909,6 +2842,9 @@ void ath_tx_node_cleanup(struct ath_soft
+@@ -2909,6 +2849,9 @@ void ath_tx_node_cleanup(struct ath_soft
tid->active = false;
ath_txq_unlock(sc, txq);