mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-26 17:01:14 +00:00
1a1a504a54
Also include follow-up regression fix from master Signed-off-by: Felix Fietkau <nbd@nbd.name> (cherry-picked from commits9861050b85
andf0992d7a30
)
43 lines
1.5 KiB
Diff
43 lines
1.5 KiB
Diff
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
|
|
@@ -1028,6 +1028,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.
|