aboutsummaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-10-27 00:43:17 +0000
committerFelix Fietkau <nbd@openwrt.org>2010-10-27 00:43:17 +0000
commit297d905bc50959928d313c9d5b8019be91d6d6eb (patch)
tree7e6dd744aefc9934acabf6bc07ba3c518341e241 /package
parent421ba6f55326e97f2208d72c7ed7a1318a26af3c (diff)
downloadmaster-187ad058-297d905bc50959928d313c9d5b8019be91d6d6eb.tar.gz
master-187ad058-297d905bc50959928d313c9d5b8019be91d6d6eb.tar.bz2
master-187ad058-297d905bc50959928d313c9d5b8019be91d6d6eb.zip
ath9k: fix aggregation flush on ar9003
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@23650 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package')
-rw-r--r--package/mac80211/patches/571-ath9k_ar9300_aggr_flush.patch34
1 files changed, 34 insertions, 0 deletions
diff --git a/package/mac80211/patches/571-ath9k_ar9300_aggr_flush.patch b/package/mac80211/patches/571-ath9k_ar9300_aggr_flush.patch
new file mode 100644
index 0000000000..3d4cfe88a1
--- /dev/null
+++ b/package/mac80211/patches/571-ath9k_ar9300_aggr_flush.patch
@@ -0,0 +1,34 @@
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -1089,15 +1089,6 @@ void ath_draintxq(struct ath_softc *sc,
+ txq->axq_tx_inprogress = false;
+ spin_unlock_bh(&txq->axq_lock);
+
+- /* flush any pending frames if aggregation is enabled */
+- if (sc->sc_flags & SC_OP_TXAGGR) {
+- if (!retry_tx) {
+- spin_lock_bh(&txq->axq_lock);
+- ath_txq_drain_pending_buffers(sc, txq);
+- spin_unlock_bh(&txq->axq_lock);
+- }
+- }
+-
+ if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
+ spin_lock_bh(&txq->axq_lock);
+ while (!list_empty(&txq->txq_fifo_pending)) {
+@@ -1118,6 +1109,15 @@ void ath_draintxq(struct ath_softc *sc,
+ }
+ spin_unlock_bh(&txq->axq_lock);
+ }
++
++ /* flush any pending frames if aggregation is enabled */
++ if (sc->sc_flags & SC_OP_TXAGGR) {
++ if (!retry_tx) {
++ spin_lock_bh(&txq->axq_lock);
++ ath_txq_drain_pending_buffers(sc, txq);
++ spin_unlock_bh(&txq->axq_lock);
++ }
++ }
+ }
+
+ void ath_drain_all_txq(struct ath_softc *sc, bool retry_tx)