| 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 |
| @@ -3834,7 +3834,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; |
| @@ -3961,7 +3961,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); |
| |
| @@ -3987,7 +3987,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; |
| @@ -4045,7 +4045,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); |
| @@ -4133,7 +4133,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. |