mac80211: add a debugfs var for the default aggregation timeout.
Since around the beginning of time, ath9k aggregates have timed out after
5000 TU (around 5000ms) of inactivity, but nobody seems to be quite sure
why, and this magic number seems to have migrated around from one place to
another. An openbsd mailing list recently had a patch to disable the
timeout completely, which they say matches some commercial routers:
https://www.mail-archive.com/tech@openbsd.org/msg29456.html
Even in Linux, several non-ath9k drivers default to no timeout already. I
think changing it directly to zero would be safe, but to allow a more
structured investigation, I want to make it configurable for now.
I confirmed that setting it to 500ms increases the incidence of b/23786055,
and setting it to 0 seems to make it go away (so far).
Change-Id: I2027e14a5be67eda79c9d46a1fdead19fced9740
diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
index a68f48b..f2921f5 100644
--- a/net/mac80211/debugfs_netdev.c
+++ b/net/mac80211/debugfs_netdev.c
@@ -664,6 +664,8 @@
}
#endif
+u32 default_agg_timeout = 5000;
+
static void add_files(struct ieee80211_sub_if_data *sdata)
{
if (!sdata->vif.debugfs_dir)
@@ -674,6 +676,8 @@
DEBUGFS_ADD(txpower);
DEBUGFS_ADD(user_power_level);
DEBUGFS_ADD(ap_power_level);
+ debugfs_create_u32("default_agg_timeout", 0600, sdata->vif.debugfs_dir,
+ &default_agg_timeout);
if (sdata->vif.type != NL80211_IFTYPE_MONITOR)
add_common_files(sdata);
diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
index 8f0b9ab..b996d8a 100644
--- a/net/mac80211/rc80211_minstrel_ht.c
+++ b/net/mac80211/rc80211_minstrel_ht.c
@@ -671,6 +671,8 @@
}
}
+extern u32 default_agg_timeout;
+
static void
minstrel_aggr_check(struct ieee80211_sta *pubsta, struct sk_buff *skb)
{
@@ -691,7 +693,7 @@
if (likely(sta->ampdu_mlme.tid_tx[tid]))
return;
- ieee80211_start_tx_ba_session(pubsta, tid, 5000);
+ ieee80211_start_tx_ba_session(pubsta, tid, default_agg_timeout);
}
static void