diff options
author | Felix Fietkau <nbd@nbd.name> | 2021-12-14 17:58:14 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2021-12-17 15:03:05 +0100 |
commit | 87def9efd8cee66da3bd3961671e580282427c2e (patch) | |
tree | 9bf2bbd279f15af9b30cf2ee7bdd122187072e8c | |
parent | 9090e0be4d4d6dc26b7789f2a5a62dbb0b124cfb (diff) | |
download | upstream-87def9efd8cee66da3bd3961671e580282427c2e.tar.gz upstream-87def9efd8cee66da3bd3961671e580282427c2e.tar.bz2 upstream-87def9efd8cee66da3bd3961671e580282427c2e.zip |
mac80211: optimize airtime fairness code to reduce cpu usage
Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r-- | package/kernel/mac80211/patches/subsys/311-mac80211-use-coarse-boottime-for-airtime-fairness-co.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/subsys/311-mac80211-use-coarse-boottime-for-airtime-fairness-co.patch b/package/kernel/mac80211/patches/subsys/311-mac80211-use-coarse-boottime-for-airtime-fairness-co.patch new file mode 100644 index 0000000000..d4472ac83d --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/311-mac80211-use-coarse-boottime-for-airtime-fairness-co.patch @@ -0,0 +1,60 @@ +From: Felix Fietkau <nbd@nbd.name> +Date: Tue, 14 Dec 2021 17:53:12 +0100 +Subject: [PATCH] mac80211: use coarse boottime for airtime fairness code + +The time values used by the airtime fairness code only need to be accurate +enough to cover station activity detection. +Using ktime_get_coarse_boottime_ns instead of ktime_get_boottime_ns will +drop the accuracy down to jiffies intervals, but at the same time saves +a lot of CPU cycles in a hot path + +Signed-off-by: Felix Fietkau <nbd@nbd.name> +--- + +--- a/net/mac80211/tx.c ++++ b/net/mac80211/tx.c +@@ -3827,7 +3827,7 @@ struct ieee80211_txq *ieee80211_next_txq + { + struct ieee80211_local *local = hw_to_local(hw); + struct airtime_sched_info *air_sched; +- u64 now = ktime_get_boottime_ns(); ++ u64 now = ktime_get_coarse_boottime_ns(); + struct ieee80211_txq *ret = NULL; + struct airtime_info *air_info; + struct txq_info *txqi = NULL; +@@ -3954,7 +3954,7 @@ void ieee80211_update_airtime_weight(str + u64 weight_sum = 0; + + if (unlikely(!now)) +- now = ktime_get_boottime_ns(); ++ now = ktime_get_coarse_boottime_ns(); + + lockdep_assert_held(&air_sched->lock); + +@@ -3980,7 +3980,7 @@ void ieee80211_schedule_txq(struct ieee8 + struct ieee80211_local *local = hw_to_local(hw); + struct txq_info *txqi = to_txq_info(txq); + struct airtime_sched_info *air_sched; +- u64 now = ktime_get_boottime_ns(); ++ u64 now = ktime_get_coarse_boottime_ns(); + struct airtime_info *air_info; + u8 ac = txq->ac; + bool was_active; +@@ -4038,7 +4038,7 @@ static void __ieee80211_unschedule_txq(s + + if (!purge) + airtime_set_active(air_sched, air_info, +- ktime_get_boottime_ns()); ++ ktime_get_coarse_boottime_ns()); + + rb_erase_cached(&txqi->schedule_order, + &air_sched->active_txqs); +@@ -4126,7 +4126,7 @@ bool ieee80211_txq_may_transmit(struct i + if (RB_EMPTY_NODE(&txqi->schedule_order)) + goto out; + +- now = ktime_get_boottime_ns(); ++ now = ktime_get_coarse_boottime_ns(); + + /* Like in ieee80211_next_txq(), make sure the first station in the + * scheduling order is eligible for transmission to avoid starvation. |