diff options
author | Felix Fietkau <nbd@openwrt.org> | 2012-10-29 12:44:37 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2012-10-29 12:44:37 +0000 |
commit | aca13bdc53c36220c74640039990e527df205366 (patch) | |
tree | 10bb5b3dab86d1b2263d3b628cc3d6bb4ea979c4 /package/mac80211/patches/300-pending_work.patch | |
parent | 1ff907f2b92263ab22bbe1d9fdd8df27428f168c (diff) | |
download | master-187ad058-aca13bdc53c36220c74640039990e527df205366.tar.gz master-187ad058-aca13bdc53c36220c74640039990e527df205366.tar.bz2 master-187ad058-aca13bdc53c36220c74640039990e527df205366.zip |
ath9k: add a patch that prevents excessive retry of single frames during an aggregation session
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33989 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/300-pending_work.patch')
-rw-r--r-- | package/mac80211/patches/300-pending_work.patch | 30 |
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); |