diff options
Diffstat (limited to 'package/kernel/mac80211/patches/subsys/311-mac80211-minstrel_ht-reduce-unnecessary-rate-probing.patch')
-rw-r--r-- | package/kernel/mac80211/patches/subsys/311-mac80211-minstrel_ht-reduce-unnecessary-rate-probing.patch | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/subsys/311-mac80211-minstrel_ht-reduce-unnecessary-rate-probing.patch b/package/kernel/mac80211/patches/subsys/311-mac80211-minstrel_ht-reduce-unnecessary-rate-probing.patch new file mode 100644 index 0000000000..11f6ead13d --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/311-mac80211-minstrel_ht-reduce-unnecessary-rate-probing.patch @@ -0,0 +1,42 @@ +From: Felix Fietkau <nbd@nbd.name> +Date: Wed, 5 Jun 2019 20:42:49 +0200 +Subject: [PATCH] mac80211: minstrel_ht: reduce unnecessary rate probing + attempts + +On hardware with static fallback tables (e.g. mt76x2), rate probing attempts +can be very expensive. +On such devices, avoid sampling rates slower than the per-group max throughput +rate, based on the assumption that the fallback table will take care of probing +lower rates within that group if the higher rates fail. +To make this work, this also fixes a wrong initialization in the previously +unused per-group sorted rate array. +To further reduce unnecessary probing attempts, skip duplicate attempts on +rates slower than the max throughput rate. + +Signed-off-by: Felix Fietkau <nbd@nbd.name> +--- + +--- a/net/mac80211/rc80211_minstrel_ht.c ++++ b/net/mac80211/rc80211_minstrel_ht.c +@@ -1059,6 +1059,21 @@ minstrel_get_sample_rate(struct minstrel + minstrel_get_duration(mi->max_prob_rate) * 3 < sample_dur) + return -1; + ++ ++ /* ++ * For devices with no configurable multi-rate retry, skip sampling ++ * below the per-group max throughput rate, and only use one sampling ++ * attempt per rate ++ */ ++ if (mp->hw->max_rates == 1 && ++ (minstrel_get_duration(mg->max_group_tp_rate[0]) < sample_dur || ++ mrs->attempts)) ++ return -1; ++ ++ /* Skip already sampled slow rates */ ++ if (sample_dur >= minstrel_get_duration(tp_rate1) && mrs->attempts) ++ return -1; ++ + /* + * Make sure that lower rates get sampled only occasionally, + * if the link is working perfectly. |