ath9k: fix an RCU issue in calling ieee80211_get_tx_rates
ath_txq_schedule is called outside of the drv_tx call, so it needs RCU protection. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
2f2a8846d5
commit
23bc2021c5
@ -1570,6 +1570,8 @@ void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq)
|
|||||||
txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
|
txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
|
|
||||||
ac = list_first_entry(&txq->axq_acq, struct ath_atx_ac, list);
|
ac = list_first_entry(&txq->axq_acq, struct ath_atx_ac, list);
|
||||||
last_ac = list_entry(txq->axq_acq.prev, struct ath_atx_ac, list);
|
last_ac = list_entry(txq->axq_acq.prev, struct ath_atx_ac, list);
|
||||||
|
|
||||||
@ -1608,8 +1610,10 @@ void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq)
|
|||||||
|
|
||||||
if (ac == last_ac ||
|
if (ac == last_ac ||
|
||||||
txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
|
txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rcu_read_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********/
|
/***********/
|
||||||
|
Loading…
Reference in New Issue
Block a user