diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/xmit.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 9 |
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) | |||
1224 | void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq) | 1224 | void 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)) { |