]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mac80211: use coarse boottime for airtime fairness code
authorFelix Fietkau <nbd@nbd.name>
Fri, 17 Dec 2021 11:42:58 +0000 (12:42 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 20 Dec 2021 09:24:41 +0000 (10:24 +0100)
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>
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
Link: https://lore.kernel.org/r/20211217114258.14619-1-nbd@nbd.name
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/tx.c

index 278945e3e08acc846782411b02307c09705d839b..cbe7d1d00a507fdfc5d213ed49ae21dab5a19e7b 100644 (file)
@@ -3821,7 +3821,7 @@ struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac)
 {
        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;
@@ -3948,7 +3948,7 @@ void ieee80211_update_airtime_weight(struct ieee80211_local *local,
        u64 weight_sum = 0;
 
        if (unlikely(!now))
-               now = ktime_get_boottime_ns();
+               now = ktime_get_coarse_boottime_ns();
 
        lockdep_assert_held(&air_sched->lock);
 
@@ -3974,7 +3974,7 @@ void ieee80211_schedule_txq(struct ieee80211_hw *hw,
        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;
@@ -4032,7 +4032,7 @@ static void __ieee80211_unschedule_txq(struct ieee80211_hw *hw,
 
        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);
@@ -4120,7 +4120,7 @@ bool ieee80211_txq_may_transmit(struct ieee80211_hw *hw,
        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.