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.c16
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