ath9k: fix a locking issue in the tx path

SVN-Revision: 29560
This commit is contained in:
Felix Fietkau 2011-12-17 14:28:25 +00:00
parent 5b89536395
commit ead4fdf1f1

View file

@ -0,0 +1,25 @@
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
@@ -189,8 +189,11 @@ static void ath_tx_flush_tid(struct ath_
tid->state &= ~AGGR_CLEANUP;
}
- if (sendbar)
+ if (sendbar) {
+ spin_unlock_bh(&txq->axq_lock);
ath_send_bar(tid, tid->seq_start);
+ spin_lock_bh(&txq->axq_lock);
+ }
}
static void ath_tx_update_baw(struct ath_softc *sc, struct ath_atx_tid *tid,
@@ -566,7 +569,9 @@ static void ath_tx_complete_aggr(struct
if (bar_index >= 0) {
u16 bar_seq = ATH_BA_INDEX2SEQ(seq_first, bar_index);
+ spin_unlock_bh(&txq->axq_lock);
ath_send_bar(tid, ATH_BA_INDEX2SEQ(seq_first, bar_index + 1));
+ spin_lock_bh(&txq->axq_lock);
if (BAW_WITHIN(tid->seq_start, tid->baw_size, bar_seq))
tid->bar_index = ATH_BA_INDEX(tid->seq_start, bar_seq);
}