summaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/300-pending_work.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-10-29 12:44:37 +0000
committerFelix Fietkau <nbd@openwrt.org>2012-10-29 12:44:37 +0000
commitc63de0e888f0d0389bce04ef0f4b005facc48b87 (patch)
treedec85116011bea32e1b24f13af3f631e3baa567a /package/mac80211/patches/300-pending_work.patch
parent47f3be57d0ecdd375242ed9bc2e3cb09debcab6d (diff)
downloadmaster-31e0f0ae-c63de0e888f0d0389bce04ef0f4b005facc48b87.tar.gz
master-31e0f0ae-c63de0e888f0d0389bce04ef0f4b005facc48b87.tar.bz2
master-31e0f0ae-c63de0e888f0d0389bce04ef0f4b005facc48b87.zip
ath9k: add a patch that prevents excessive retry of single frames during an aggregation session
SVN-Revision: 33989
Diffstat (limited to 'package/mac80211/patches/300-pending_work.patch')
-rw-r--r--package/mac80211/patches/300-pending_work.patch30
1 files changed, 30 insertions, 0 deletions
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index 9a4b24e4ea..6f35a07bed 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -649,3 +649,33 @@
return rdev->ops->deauth(&rdev->wiphy, dev, &req);
}
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -386,7 +386,7 @@ static void ath_tx_complete_aggr(struct
+ u16 seq_st = 0, acked_cnt = 0, txfail_cnt = 0, seq_first;
+ u32 ba[WME_BA_BMP_SIZE >> 5];
+ int isaggr, txfail, txpending, sendbar = 0, needreset = 0, nbad = 0;
+- bool rc_update = true;
++ bool rc_update = true, isba;
+ struct ieee80211_tx_rate rates[4];
+ struct ath_frame_info *fi;
+ int nframes;
+@@ -430,13 +430,17 @@ static void ath_tx_complete_aggr(struct
+ tidno = ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
+ tid = ATH_AN_2_TID(an, tidno);
+ seq_first = tid->seq_start;
++ isba = ts->ts_flags & ATH9K_TX_BA;
+
+ /*
+ * The hardware occasionally sends a tx status for the wrong TID.
+ * In this case, the BA status cannot be considered valid and all
+ * subframes need to be retransmitted
++ *
++ * Only BlockAcks have a TID and therefore normal Acks cannot be
++ * checked
+ */
+- if (tidno != ts->tid)
++ if (isba && tidno != ts->tid)
+ txok = false;
+
+ isaggr = bf_isaggr(bf);