summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-12-17 14:28:25 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-12-17 14:28:25 +0000
commit36ae05501c8143107279cb5178fef87ea74a754b (patch)
treecb281d6cc1521d92d56760a0937326438e40ecb3
parentf76aa7d45911c64a1c86d90ac5cc8c5885342da6 (diff)
ath9k: fix a locking issue in the tx path
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29560 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/mac80211/patches/565-ath9k_fix_lockup.patch25
1 files changed, 25 insertions, 0 deletions
diff --git a/package/mac80211/patches/565-ath9k_fix_lockup.patch b/package/mac80211/patches/565-ath9k_fix_lockup.patch
new file mode 100644
index 0000000000..c1721eba53
--- /dev/null
+++ b/package/mac80211/patches/565-ath9k_fix_lockup.patch
@@ -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);
+ }