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 | c63de0e888f0d0389bce04ef0f4b005facc48b87 (patch) | |
tree | dec85116011bea32e1b24f13af3f631e3baa567a /package/mac80211/patches/300-pending_work.patch | |
parent | 47f3be57d0ecdd375242ed9bc2e3cb09debcab6d (diff) | |
download | upstream-c63de0e888f0d0389bce04ef0f4b005facc48b87.tar.gz upstream-c63de0e888f0d0389bce04ef0f4b005facc48b87.tar.bz2 upstream-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.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); |