diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/xmit.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 7e19d9b5214e..c59ae43b9b35 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -1673,6 +1673,8 @@ void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq) | |||
1673 | txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) | 1673 | txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) |
1674 | return; | 1674 | return; |
1675 | 1675 | ||
1676 | rcu_read_lock(); | ||
1677 | |||
1676 | ac = list_first_entry(&txq->axq_acq, struct ath_atx_ac, list); | 1678 | ac = list_first_entry(&txq->axq_acq, struct ath_atx_ac, list); |
1677 | last_ac = list_entry(txq->axq_acq.prev, struct ath_atx_ac, list); | 1679 | last_ac = list_entry(txq->axq_acq.prev, struct ath_atx_ac, list); |
1678 | 1680 | ||
@@ -1711,8 +1713,10 @@ void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq) | |||
1711 | 1713 | ||
1712 | if (ac == last_ac || | 1714 | if (ac == last_ac || |
1713 | txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) | 1715 | txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) |
1714 | return; | 1716 | break; |
1715 | } | 1717 | } |
1718 | |||
1719 | rcu_read_unlock(); | ||
1716 | } | 1720 | } |
1717 | 1721 | ||
1718 | /***********/ | 1722 | /***********/ |
@@ -1778,9 +1782,13 @@ static void ath_tx_txqaddbuf(struct ath_softc *sc, struct ath_txq *txq, | |||
1778 | } | 1782 | } |
1779 | 1783 | ||
1780 | if (!internal) { | 1784 | if (!internal) { |
1781 | txq->axq_depth++; | 1785 | while (bf) { |
1782 | if (bf_is_ampdu_not_probing(bf)) | 1786 | txq->axq_depth++; |
1783 | txq->axq_ampdu_depth++; | 1787 | if (bf_is_ampdu_not_probing(bf)) |
1788 | txq->axq_ampdu_depth++; | ||
1789 | |||
1790 | bf = bf->bf_lastbf->bf_next; | ||
1791 | } | ||
1784 | } | 1792 | } |
1785 | } | 1793 | } |
1786 | 1794 | ||