summaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/530-mac80211_minstrel_ht_aggr_delay.patch
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-04-07 18:42:22 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-04-07 18:42:22 +0000
commitc0b61bdf0a1be6598e7a9072a987f4a35b71b339 (patch)
treefcefd647370191c1eb3998e09276c0e667329a18 /package/mac80211/patches/530-mac80211_minstrel_ht_aggr_delay.patch
parentf6577081a46ef63949e19e277653ebf36010194a (diff)
mac80211: update to wireless-testing 2011-04-06
adds some more pending patches which (among other things) fix the 'failed to stop RX DMA' messages git-svn-id: svn://svn.openwrt.org/openwrt/trunk@26506 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mac80211/patches/530-mac80211_minstrel_ht_aggr_delay.patch')
-rw-r--r--package/mac80211/patches/530-mac80211_minstrel_ht_aggr_delay.patch49
1 files changed, 49 insertions, 0 deletions
diff --git a/package/mac80211/patches/530-mac80211_minstrel_ht_aggr_delay.patch b/package/mac80211/patches/530-mac80211_minstrel_ht_aggr_delay.patch
new file mode 100644
index 000000000..c0a6bf3ff
--- /dev/null
+++ b/package/mac80211/patches/530-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 {