* [PATCH] hrtimer: Retrigger local timers after clock changes
@ 2026-11-01 14:15 Avi Weiss
2026-11-03 15:01 ` Frederic Weisbecker
2026-11-09 19:53 ` [tip: timers/core] " tip-bot2 for Avi Weiss
0 siblings, 2 replies; 3+ messages in thread
From: Avi Weiss @ 2026-11-01 14:15 UTC (permalink / raw)
To: Anna-Maria Behnsen, Frederic Weisbecker, Thomas Gleixner
Cc: Marcelo Tosatti, linux-kernel, Avi Weiss
clock_was_set() selects CPUs whose hrtimer deadlines move earlier
after a clock change. smp_call_function_many() excludes the calling
CPU even when it is in the mask, leaving its clock event programmed
for the old deadline. An overdue realtime timer can then expire
only when a later event triggers timer handling.
Use on_each_cpu_mask() to retrigger the local CPU when selected,
without interrupting CPUs with unaffected deadlines.
Fixes: 81d741d3460c ("hrtimer: Avoid unnecessary SMP function calls in clock_was_set()")
Signed-off-by: Avi Weiss <thnkslprpt@gmail.com>
---
kernel/time/hrtimer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index 17dd38a6cee7..3133d7403a74 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -1000,7 +1000,7 @@ void clock_was_set(unsigned int bases)
cpumask_set_cpu(cpu, mask);
}
scoped_guard(preempt)
- smp_call_function_many(mask, retrigger_next_event, NULL, 1);
+ on_each_cpu_mask(mask, retrigger_next_event, NULL, 1);
}
free_cpumask_var(mask);
base-commit: d135ab453a7400a34930bdda1ef4bdc8acfac80e
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] hrtimer: Retrigger local timers after clock changes
2026-11-01 14:15 [PATCH] hrtimer: Retrigger local timers after clock changes Avi Weiss
@ 2026-11-03 15:01 ` Frederic Weisbecker
2026-11-09 19:53 ` [tip: timers/core] " tip-bot2 for Avi Weiss
1 sibling, 0 replies; 3+ messages in thread
From: Frederic Weisbecker @ 2026-11-03 15:01 UTC (permalink / raw)
To: Avi Weiss
Cc: Anna-Maria Behnsen, Thomas Gleixner, Marcelo Tosatti,
linux-kernel
Le Sun, Nov 01, 2026 at 04:15:53PM +0200, Avi Weiss a écrit :
> clock_was_set() selects CPUs whose hrtimer deadlines move earlier
> after a clock change. smp_call_function_many() excludes the calling
> CPU even when it is in the mask, leaving its clock event programmed
> for the old deadline. An overdue realtime timer can then expire
> only when a later event triggers timer handling.
>
> Use on_each_cpu_mask() to retrigger the local CPU when selected,
> without interrupting CPUs with unaffected deadlines.
>
> Fixes: 81d741d3460c ("hrtimer: Avoid unnecessary SMP function calls in clock_was_set()")
> Signed-off-by: Avi Weiss <thnkslprpt@gmail.com>
> ---
> kernel/time/hrtimer.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
> index 17dd38a6cee7..3133d7403a74 100644
> --- a/kernel/time/hrtimer.c
> +++ b/kernel/time/hrtimer.c
> @@ -1000,7 +1000,7 @@ void clock_was_set(unsigned int bases)
> cpumask_set_cpu(cpu, mask);
> }
> scoped_guard(preempt)
> - smp_call_function_many(mask, retrigger_next_event, NULL,
> 1);
Heh, this API is so error prone... If it really doesn't want to call on the
local CPU (for some undescribed reason), it should at least be renamed to
smp_call_function_many_butself().
> + on_each_cpu_mask(mask, retrigger_next_event, NULL, 1);
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
--
Frederic Weisbecker
SUSE Labs
^ permalink raw reply [flat|nested] 3+ messages in thread* [tip: timers/core] hrtimer: Retrigger local timers after clock changes
2026-11-01 14:15 [PATCH] hrtimer: Retrigger local timers after clock changes Avi Weiss
2026-11-03 15:01 ` Frederic Weisbecker
@ 2026-11-09 19:53 ` tip-bot2 for Avi Weiss
1 sibling, 0 replies; 3+ messages in thread
From: tip-bot2 for Avi Weiss @ 2026-11-09 19:53 UTC (permalink / raw)
To: linux-tip-commits
Cc: Avi Weiss, Thomas Gleixner, Frederic Weisbecker, x86,
linux-kernel
The following commit has been merged into the timers/core branch of tip:
Commit-ID: 81b8beef105bd9151ca1fa2e0796933a46adb670
Gitweb: https://git.kernel.org/tip/81b8beef105bd9151ca1fa2e0796933a46adb670
Author: Avi Weiss <thnkslprpt@gmail.com>
AuthorDate: Sun, 01 Nov 2026 16:15:53 +02:00
Committer: Thomas Gleixner <tglx@kernel.org>
CommitterDate: Mon, 09 Nov 2026 20:25:25 +01:00
hrtimer: Retrigger local timers after clock changes
clock_was_set() selects CPUs whose hrtimer deadlines move earlier
after a clock change. smp_call_function_many() excludes the calling
CPU even when it is in the mask, leaving its clock event programmed
for the old deadline. An overdue realtime timer can then expire
only when a later event triggers timer handling.
Use on_each_cpu_mask() to retrigger the local CPU when selected,
without interrupting CPUs with unaffected deadlines.
Fixes: 81d741d3460c ("hrtimer: Avoid unnecessary SMP function calls in clock_was_set()")
Signed-off-by: Avi Weiss <thnkslprpt@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Link: https://patch.msgid.link/20261101141552.644764-2-thnkslprpt@gmail.com
---
kernel/time/hrtimer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index a9dc2d5..6d7a0d8 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -1000,7 +1000,7 @@ void clock_was_set(unsigned int bases)
cpumask_set_cpu(cpu, mask);
}
scoped_guard(preempt)
- smp_call_function_many(mask, retrigger_next_event, NULL, 1);
+ on_each_cpu_mask(mask, retrigger_next_event, NULL, 1);
}
free_cpumask_var(mask);
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-09 19:53 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-01 14:15 [PATCH] hrtimer: Retrigger local timers after clock changes Avi Weiss
2026-11-03 15:01 ` Frederic Weisbecker
2026-11-09 19:53 ` [tip: timers/core] " tip-bot2 for Avi Weiss
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.