ath5k: fix locking in tx_complete_poll_work
ath5k_reset must be called with sc->lock. Since the tx queue watchdog runs in a workqueue and accesses sc, it's appropriate to just take the lock over the whole function. Signed-off-by: Bob Copeland <me@bobcopeland.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
811ea256b3
commit
599b13adc2
@@ -2294,6 +2294,8 @@ ath5k_tx_complete_poll_work(struct work_struct *work)
|
|||||||
int i;
|
int i;
|
||||||
bool needreset = false;
|
bool needreset = false;
|
||||||
|
|
||||||
|
mutex_lock(&sc->lock);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(sc->txqs); i++) {
|
for (i = 0; i < ARRAY_SIZE(sc->txqs); i++) {
|
||||||
if (sc->txqs[i].setup) {
|
if (sc->txqs[i].setup) {
|
||||||
txq = &sc->txqs[i];
|
txq = &sc->txqs[i];
|
||||||
@@ -2321,6 +2323,8 @@ ath5k_tx_complete_poll_work(struct work_struct *work)
|
|||||||
ath5k_reset(sc, NULL, true);
|
ath5k_reset(sc, NULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex_unlock(&sc->lock);
|
||||||
|
|
||||||
ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work,
|
ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work,
|
||||||
msecs_to_jiffies(ATH5K_TX_COMPLETE_POLL_INT));
|
msecs_to_jiffies(ATH5K_TX_COMPLETE_POLL_INT));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user