aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/xmit.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/xmit.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/xmit.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
index ab4f7b4f789f..fffd13d204b5 100644
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
@@ -1224,12 +1224,14 @@ void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq)
1224void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq) 1224void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq)
1225{ 1225{
1226 struct ath_atx_ac *ac; 1226 struct ath_atx_ac *ac;
1227 struct ath_atx_tid *tid; 1227 struct ath_atx_tid *tid, *last;
1228 1228
1229 if (list_empty(&txq->axq_acq)) 1229 if (list_empty(&txq->axq_acq) ||
1230 txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
1230 return; 1231 return;
1231 1232
1232 ac = list_first_entry(&txq->axq_acq, struct ath_atx_ac, list); 1233 ac = list_first_entry(&txq->axq_acq, struct ath_atx_ac, list);
1234 last = list_entry(ac->tid_q.prev, struct ath_atx_tid, list);
1233 list_del(&ac->list); 1235 list_del(&ac->list);
1234 ac->sched = false; 1236 ac->sched = false;
1235 1237
@@ -1253,7 +1255,8 @@ void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq)
1253 if (!list_empty(&tid->buf_q)) 1255 if (!list_empty(&tid->buf_q))
1254 ath_tx_queue_tid(txq, tid); 1256 ath_tx_queue_tid(txq, tid);
1255 1257
1256 break; 1258 if (tid == last || txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
1259 break;
1257 } while (!list_empty(&ac->tid_q)); 1260 } while (!list_empty(&ac->tid_q));
1258 1261
1259 if (!list_empty(&ac->tid_q)) { 1262 if (!list_empty(&ac->tid_q)) {