sched/hrtimer: Fix reprogram with wrong expiration when reinserting hrtimer

In hrtimer_start_absolute, when a pending hrtimer is removed (was the
head) and reinserted with a later expiration time, the reprogram flag
remains true but the hrtimer is no longer the earliest timer in the
queue. The old code passed hrtimer->expired to hrtimer_reprogram, which
was incorrect. Use hrtimer_get_first()->expired to ensure the hardware
timer is reprogrammed with the actual earliest timer's expiration time.

Signed-off-by: ouyangxiangzhen <ouyangxiangzhen@xiaomi.com>
This commit is contained in:
ouyangxiangzhen 2026-07-24 16:22:08 +08:00 committed by Alan C. Assis
parent b438b7a083
commit f134a5678d

View file

@ -88,7 +88,7 @@ int hrtimer_start_absolute(FAR hrtimer_t *hrtimer, hrtimer_entry_t func,
if (reprogram)
{
hrtimer_reprogram(hrtimer->expired);
hrtimer_reprogram(hrtimer_get_first()->expired);
}
/* Release the lock and give up the ownership of the hrtimer queue. */