From d7dea90c00f84604a5af4805c5fc186bcc884987 Mon Sep 17 00:00:00 2001 From: nbd Date: Sun, 3 Apr 2011 17:36:47 +0000 Subject: [PATCH] mac80211: increase delay between aggregation session negotiation attempts - improves interop with intel clients (backport of r26444) git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@26445 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../542-mac80211_minstrel_ht_aggr_delay.patch | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 package/mac80211/patches/542-mac80211_minstrel_ht_aggr_delay.patch diff --git a/package/mac80211/patches/542-mac80211_minstrel_ht_aggr_delay.patch b/package/mac80211/patches/542-mac80211_minstrel_ht_aggr_delay.patch new file mode 100644 index 000000000..c0a6bf3ff --- /dev/null +++ b/package/mac80211/patches/542-mac80211_minstrel_ht_aggr_delay.patch @@ -0,0 +1,49 @@ +--- a/net/mac80211/rc80211_minstrel_ht.c ++++ b/net/mac80211/rc80211_minstrel_ht.c +@@ -355,10 +355,12 @@ minstrel_downgrade_rate(struct minstrel_ + } + + static void +-minstrel_aggr_check(struct minstrel_priv *mp, struct ieee80211_sta *pubsta, struct sk_buff *skb) ++minstrel_aggr_check(struct minstrel_priv *mp, struct minstrel_ht_sta *mi, ++ struct ieee80211_sta *pubsta, struct sk_buff *skb) + { + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; + struct sta_info *sta = container_of(pubsta, struct sta_info, sta); ++ unsigned long t1, t2; + u16 tid; + + if (unlikely(!ieee80211_is_data_qos(hdr->frame_control))) +@@ -374,6 +376,12 @@ minstrel_aggr_check(struct minstrel_priv + if (skb_get_queue_mapping(skb) == IEEE80211_AC_VO) + return; + ++ t1 = mi->last_aggr_start_time[tid]; ++ t2 = t1 + msecs_to_jiffies(5000); ++ if (unlikely(time_in_range(jiffies, t1, t2))) ++ return; ++ ++ mi->last_aggr_start_time[tid] = jiffies; + ieee80211_start_tx_ba_session(pubsta, tid, 5000); + } + +@@ -452,7 +460,7 @@ minstrel_ht_tx_status(void *priv, struct + + if (time_after(jiffies, mi->stats_update + (mp->update_interval / 2 * HZ) / 1000)) { + minstrel_ht_update_stats(mp, mi); +- minstrel_aggr_check(mp, sta, skb); ++ minstrel_aggr_check(mp, mi, sta, skb); + } + } + +--- a/net/mac80211/rc80211_minstrel_ht.h ++++ b/net/mac80211/rc80211_minstrel_ht.h +@@ -109,6 +109,8 @@ struct minstrel_ht_sta { + + /* MCS rate group info and statistics */ + struct minstrel_mcs_group_data groups[MINSTREL_MAX_STREAMS * MINSTREL_STREAM_GROUPS]; ++ ++ unsigned long last_aggr_start_time[IEEE80211_QOS_CTL_TID_MASK + 1]; + }; + + struct minstrel_ht_sta_priv { -- 2.35.1