[PATCH 0/5] arm64: arch_timer: Improve errata handling
From: Marc Zyngier
Date: Mon Mar 02 2026 - 05:30:39 EST
Time is hard. Timers are harder. As a consequence, we have plenty of
broken counter/timer implementations in the wild, and an
infrastructure to deal with them.
However, what we have today suffers from a number of issues:
- if, on an heterogeneous system, affected CPUs are secondaries, we do
record their broken state but don't correct anything
- we always play games with preemption in order to access per-CPU
state, irrespective of the presence of broken CPUs
I hear someone saying "just use a static key to enable the errata and
be done with it". Good call, except that we need to do that from a
CPUHP callback, and that's deadlock central. We can't do it later,
because this could affect the CPU before the workaround is enabled.
However, not everything is lost if we turn the logic on its head:
- always start with the mitigations enabled, even if we don't know of
any affected CPU
- once all CPUs have been seen once, and that we still haven't
enabled any workaround, disable the mitigations globally.
With that, a normal kernel boot with all CPUs will quickly switch to
no mitigation on decent HW. If you're booting with CPUs disabled, this
will only kick in once you have booted them all.
Patches on top of -rc2.
Marc Zyngier (5):
clocksource/drivers/arm_arch_timer: Add a static key indicating the
need for a runtime workaround
clocksource/drivers/arm_arch_timer: Convert counter accessors to a
static key alternative
clocksource/drivers/arm_arch_timer: Drop the
arch_counter_get_cnt{p,v}ct_stable() accessors
clocksource/drivers/arm_arch_timer: Expose a direct accessor for the
virtual counter
arm64: Convert __delay_cycles() to arch_timer_read_vcounter()
arch/arm64/lib/delay.c | 5 +-
drivers/clocksource/arm_arch_timer.c | 99 +++++++++++++++++-----------
include/clocksource/arm_arch_timer.h | 1 +
3 files changed, 64 insertions(+), 41 deletions(-)
--
2.47.3