aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/300-pending_work.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-03-15 22:24:36 +0000
committerFelix Fietkau <nbd@openwrt.org>2013-03-15 22:24:36 +0000
commit453d20849b198e9afd015e0009f6ade32db69a52 (patch)
treebec98de8f0ab0c1d88a76873ba7df281461ffc99 /package/mac80211/patches/300-pending_work.patch
parentd3063b986ada9a588e507de88e05e5b63817d0c2 (diff)
downloadupstream-453d20849b198e9afd015e0009f6ade32db69a52.tar.gz
upstream-453d20849b198e9afd015e0009f6ade32db69a52.tar.bz2
upstream-453d20849b198e9afd015e0009f6ade32db69a52.zip
ath9k: add a fix to reduce the number of spurious tx hang detections
Backport of r36040 git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@36052 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/300-pending_work.patch')
-rw-r--r--package/mac80211/patches/300-pending_work.patch37
1 files changed, 37 insertions, 0 deletions
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index 7cc4569673..ad9c5004a8 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -2071,3 +2071,40 @@
#define ATH_RSSI_LPF_LEN 10
#define RSSI_LPF_THRESHOLD -20
#define ATH_RSSI_EP_MULTIPLIER (1<<7)
+--- a/drivers/net/wireless/ath/ath9k/link.c
++++ b/drivers/net/wireless/ath/ath9k/link.c
+@@ -31,21 +31,21 @@ void ath_tx_complete_poll_work(struct wo
+ sc->tx_complete_poll_work_seen++;
+ #endif
+
+- for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
+- if (ATH_TXQ_SETUP(sc, i)) {
+- txq = &sc->tx.txq[i];
+- ath_txq_lock(sc, txq);
+- if (txq->axq_depth) {
+- if (txq->axq_tx_inprogress) {
+- needreset = true;
+- ath_txq_unlock(sc, txq);
+- break;
+- } else {
+- txq->axq_tx_inprogress = true;
+- }
++ for (i = 0; i < IEEE80211_NUM_ACS; i++) {
++ txq = sc->tx.txq_map[i];
++
++ ath_txq_lock(sc, txq);
++ if (txq->axq_depth) {
++ if (txq->axq_tx_inprogress) {
++ needreset = true;
++ ath_txq_unlock(sc, txq);
++ break;
++ } else {
++ txq->axq_tx_inprogress = true;
+ }
+- ath_txq_unlock_complete(sc, txq);
+ }
++ ath_txq_unlock_complete(sc, txq);
++ }
+
+ if (needreset) {
+ ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,