[tip: timers/core] posix-timers: Switch to hrtimer_start_expires_user()

tip-bot2 for Thomas Gleixner posted 1 patch 1 month, 1 week ago
kernel/time/posix-timers.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
[tip: timers/core] posix-timers: Switch to hrtimer_start_expires_user()
Posted by tip-bot2 for Thomas Gleixner 1 month, 1 week ago
The following commit has been merged into the timers/core branch of tip:

Commit-ID:     acc071343d29c2361619b05ad50ea3de9ef9a3ac
Gitweb:        https://git.kernel.org/tip/acc071343d29c2361619b05ad50ea3de9ef9a3ac
Author:        Thomas Gleixner <tglx@kernel.org>
AuthorDate:    Wed, 08 Apr 2026 13:54:06 +02:00
Committer:     Thomas Gleixner <tglx@kernel.org>
CommitterDate: Fri, 01 May 2026 21:36:12 +02:00

posix-timers: Switch to hrtimer_start_expires_user()

Switch the arm and rearm callbacks for hrtimer based posix timers over to
hrtimer_start_expires_user() so that already expired timers are not
queued. Hand the result back to the caller, which then queues the signal.

Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260408114952.266001916@kernel.org
---
 kernel/time/posix-timers.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
index db62cfa..436ba79 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -293,8 +293,7 @@ static bool common_hrtimer_rearm(struct k_itimer *timr)
 	struct hrtimer *timer = &timr->it.real.timer;
 
 	timr->it_overrun += hrtimer_forward_now(timer, timr->it_interval);
-	hrtimer_restart(timer);
-	return true;
+	return hrtimer_start_expires_user(timer, HRTIMER_MODE_ABS);
 }
 
 static bool __posixtimer_deliver_signal(struct kernel_siginfo *info, struct k_itimer *timr)
@@ -829,9 +828,11 @@ static bool common_hrtimer_arm(struct k_itimer *timr, ktime_t expires,
 		expires = ktime_add_safe(expires, hrtimer_cb_get_time(timer));
 	hrtimer_set_expires(timer, expires);
 
-	if (!sigev_none)
-		hrtimer_start_expires(timer, HRTIMER_MODE_ABS);
-	return true;
+	/* For sigev_none pretend that the timer is queued */
+	if (sigev_none)
+		return true;
+
+	return hrtimer_start_expires_user(timer, HRTIMER_MODE_ABS);
 }
 
 static int common_hrtimer_try_to_cancel(struct k_itimer *timr)