From: Thomas Gleixner Date: Tue, 24 Feb 2026 16:38:42 +0000 (+0100) Subject: hrtimer: Optimize for_each_active_base() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3601a1d85028d7d479e1571419174fc3334f58f5;p=thirdparty%2Fkernel%2Flinux.git hrtimer: Optimize for_each_active_base() Give the compiler some help to emit way better code. Signed-off-by: Thomas Gleixner Signed-off-by: Peter Zijlstra (Intel) Link: https://patch.msgid.link/20260224163431.599804894@kernel.org --- diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index b0e7e29ade107..d1e58482e0a90 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -529,22 +529,10 @@ static inline void debug_activate(struct hrtimer *timer, enum hrtimer_mode mode, trace_hrtimer_start(timer, mode, was_armed); } -static struct hrtimer_clock_base * -__next_base(struct hrtimer_cpu_base *cpu_base, unsigned int *active) -{ - unsigned int idx; - - if (!*active) - return NULL; - - idx = __ffs(*active); - *active &= ~(1U << idx); - - return &cpu_base->clock_base[idx]; -} - -#define for_each_active_base(base, cpu_base, active) \ - while ((base = __next_base((cpu_base), &(active)))) +#define for_each_active_base(base, cpu_base, active) \ + for (unsigned int idx = ffs(active); idx--; idx = ffs((active))) \ + for (bool done = false; !done; active &= ~(1U << idx)) \ + for (base = &cpu_base->clock_base[idx]; !done; done = true) #if defined(CONFIG_NO_HZ_COMMON) /*