[PATCH] sched/idle: Destroy on-stack hrtimer in play_idle_precise()
From: Hui Su
Date: Wed Oct 14 2026 - 22:52:50 EST
play_idle_precise() initializes it.timer with hrtimer_setup_on_stack(),
but does not call destroy_hrtimer_on_stack() before the stack object
goes out of scope.
With CONFIG_DEBUG_OBJECTS_TIMERS, hrtimer_setup_on_stack() registers the
timer as an on-stack debug object. Such objects must be removed before
leaving the function which allocated them.
Call destroy_hrtimer_on_stack() after the expiry loop to balance the
on-stack timer lifetime.
Fixes: c1de45ca831a ("sched/idle: Add support for tasks that inject idle")
Signed-off-by: Hui Su <sh_def@xxxxxxx>
---
Tested on x86_64 combined candidate tree:
- hrtimer setup/free oracle: PASS (127/127 and 129/129)
- bzImage and modules build: PASS
- Branch-specific validation after split: NOT RUN
kernel/sched/idle.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index eb73b65ce6c4..96adec3f0a6d 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -436,6 +436,7 @@ void play_idle_precise(u64 duration_ns, u64 latency_ns)
while (!READ_ONCE(it.done))
do_idle();
+ destroy_hrtimer_on_stack(&it.timer);
cpuidle_use_deepest_state(0);
current->flags &= ~PF_IDLE;
base-commit: 0fcb05b72344f40806cbe810de8872f1698bf053