[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