aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2014-03-09 10:05:41 +0000
committerFelix Fietkau <nbd@openwrt.org>2014-03-09 10:05:41 +0000
commit28509f07a6706b63c9efb5acfacd4113c15bfc04 (patch)
tree37b2b1056eeaa2baf800f8d141a1f95702b75112 /package/kernel
parent4c7ec31e4e9a0ff1dc13f39e761bb6205d4cec8c (diff)
downloadmaster-187ad058-28509f07a6706b63c9efb5acfacd4113c15bfc04.tar.gz
master-187ad058-28509f07a6706b63c9efb5acfacd4113c15bfc04.tar.bz2
master-187ad058-28509f07a6706b63c9efb5acfacd4113c15bfc04.zip
ath9k: fix tx queue configuration for buffered multicast frames
Signed-off-by: Felix Fietkau <nbd@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39848 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/kernel')
-rw-r--r--package/kernel/mac80211/patches/300-pending_work.patch26
1 files changed, 26 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/300-pending_work.patch b/package/kernel/mac80211/patches/300-pending_work.patch
index e4eaecfd41..8b044d2a54 100644
--- a/package/kernel/mac80211/patches/300-pending_work.patch
+++ b/package/kernel/mac80211/patches/300-pending_work.patch
@@ -1,3 +1,20 @@
+commit 22e298b5a3a8a49e33805d4e351965123dede35b
+Author: Felix Fietkau <nbd@openwrt.org>
+Date: Sun Mar 9 10:58:47 2014 +0100
+
+ ath9k: fix ready time of the multicast buffer queue
+
+ qi->tqi_readyTime is written directly to registers that expect
+ microseconds as unit instead of TU.
+ When setting the CABQ ready time, cur_conf->beacon_interval is in TU, so
+ convert it to microseconds before passing it to ath9k_hw.
+
+ This should hopefully fix some Tx DMA issues with buffered multicast
+ frames in AP mode.
+
+ Cc: stable@vger.kernel.org
+ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+
commit fcb064fdd5a27bec8d24099bc0172468f34c97cb
Author: Felix Fietkau <nbd@openwrt.org>
Date: Sun Mar 9 09:43:09 2014 +0100
@@ -3286,6 +3303,15 @@ Date: Thu Jan 23 20:06:34 2014 +0100
buffered = ath_tid_has_buffered(tid);
tid->sched = false;
+@@ -1696,7 +1698,7 @@ int ath_cabq_update(struct ath_softc *sc
+
+ ath9k_hw_get_txq_props(sc->sc_ah, qnum, &qi);
+
+- qi.tqi_readyTime = (cur_conf->beacon_interval *
++ qi.tqi_readyTime = (TU_TO_USEC(cur_conf->beacon_interval) *
+ ATH_CABQ_READY_TIME) / 100;
+ ath_txq_update(sc, qnum, &qi);
+
@@ -2184,14 +2186,15 @@ int ath_tx_start(struct ieee80211_hw *hw
txq->stopped = true;
}