summaryrefslogtreecommitdiff
path: root/kernel/time/hrtimer.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@kernel.org>2026-02-24 17:38:42 +0100
committerPeter Zijlstra <peterz@infradead.org>2026-02-27 16:40:15 +0100
commit3601a1d85028d7d479e1571419174fc3334f58f5 (patch)
tree2d583ce27301f91e3bdfa6f8d9d6dce5551bbcd1 /kernel/time/hrtimer.c
parenta64ad57e41c7e3daadbc2c1bc252d9a90c87222f (diff)
hrtimer: Optimize for_each_active_base()
Give the compiler some help to emit way better code. Signed-off-by: Thomas Gleixner <tglx@kernel.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://patch.msgid.link/20260224163431.599804894@kernel.org
Diffstat (limited to 'kernel/time/hrtimer.c')
-rw-r--r--kernel/time/hrtimer.c20
1 files changed, 4 insertions, 16 deletions
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index b0e7e29ade10..d1e58482e0a9 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)
/*