diff options
Diffstat (limited to 'package/kernel/mac80211/patches/subsys/301-mac80211-minstrel-remove-divisions-in-tx-status-path.patch')
-rw-r--r-- | package/kernel/mac80211/patches/subsys/301-mac80211-minstrel-remove-divisions-in-tx-status-path.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/subsys/301-mac80211-minstrel-remove-divisions-in-tx-status-path.patch b/package/kernel/mac80211/patches/subsys/301-mac80211-minstrel-remove-divisions-in-tx-status-path.patch new file mode 100644 index 0000000000..0bdeded529 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/301-mac80211-minstrel-remove-divisions-in-tx-status-path.patch @@ -0,0 +1,61 @@ +From: Felix Fietkau <nbd@nbd.name> +Date: Sat, 28 Sep 2019 15:44:06 +0200 +Subject: [PATCH] mac80211: minstrel: remove divisions in tx status path + +Use a slightly different threshold for downgrading spatial streams to +make it easier to calculate without divisions. +Slightly reduces CPU overhead. + +Signed-off-by: Felix Fietkau <nbd@nbd.name> +--- + +--- a/net/mac80211/rc80211_minstrel.c ++++ b/net/mac80211/rc80211_minstrel.c +@@ -289,8 +289,7 @@ minstrel_tx_status(void *priv, struct ie + if (mi->sample_deferred > 0) + mi->sample_deferred--; + +- if (time_after(jiffies, mi->last_stats_update + +- (mp->update_interval * HZ) / 1000)) ++ if (time_after(jiffies, mi->last_stats_update + mp->update_interval)) + minstrel_update_stats(mp, mi); + } + +--- a/net/mac80211/rc80211_minstrel_ht.c ++++ b/net/mac80211/rc80211_minstrel_ht.c +@@ -970,23 +970,21 @@ minstrel_ht_tx_status(void *priv, struct + */ + rate = minstrel_get_ratestats(mi, mi->max_tp_rate[0]); + if (rate->attempts > 30 && +- MINSTREL_FRAC(rate->success, rate->attempts) < +- MINSTREL_FRAC(20, 100)) { ++ rate->success < rate->attempts / 4) { + minstrel_downgrade_rate(mi, &mi->max_tp_rate[0], true); + update = true; + } + + rate2 = minstrel_get_ratestats(mi, mi->max_tp_rate[1]); + if (rate2->attempts > 30 && +- MINSTREL_FRAC(rate2->success, rate2->attempts) < +- MINSTREL_FRAC(20, 100)) { ++ rate2->success < rate2->attempts / 4) { + minstrel_downgrade_rate(mi, &mi->max_tp_rate[1], false); + update = true; + } + } + + if (time_after(jiffies, mi->last_stats_update + +- (mp->update_interval / 2 * HZ) / 1000)) { ++ mp->update_interval / 2)) { + update = true; + minstrel_ht_update_stats(mp, mi, true); + } +@@ -1666,7 +1664,7 @@ minstrel_ht_alloc(struct ieee80211_hw *h + mp->has_mrr = true; + + mp->hw = hw; +- mp->update_interval = 100; ++ mp->update_interval = HZ / 10; + + #ifdef CPTCFG_MAC80211_DEBUGFS + mp->fixed_rate_idx = (u32) -1; |