mac80211: add new minstrel_ht patches to improve probing on mt76x2
[openwrt/staging/wigyori.git] / package / kernel / mac80211 / patches / subsys / 311-mac80211-minstrel_ht-reduce-unnecessary-rate-probing.patch
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 (file)
index 0000000..11f6ead
--- /dev/null
@@ -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.