Commit b2f21d1b7bc80150f2b7d1fecae5f64c9ead26fa

Authored by Catalin Marinas
Committed by Greg Kroah-Hartman
1 parent 793332a443

clocksource: arch_timer: Only use the virtual counter (CNTVCT) on arm64

commit d6ad36913083d683aad4e02e53580c995f1a6ede upstream.

Commit 0b46b8a718c6 (clocksource: arch_timer: Fix code to use physical
timers when requested) introduces the use of physical counters in the
ARM architected timer driver. However, he arm64 kernel uses CNTVCT in
VDSO. When booting in EL2, the kernel switches to the physical timers to
make things easier for KVM but it continues to use the virtual counter
both in user and kernel. While in such scenario CNTVCT == CNTPCT (since
CNTVOFF is initialised by the kernel to 0), we want to spot firmware
bugs corrupting CNTVOFF early (which would affect CNTVCT).

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Tested-by: Yingjoe Chen <yingjoe.chen@mediatek.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Fixes: 0b46b8a718c6 ("clocksource: arch_timer: Fix code to use physical
timers when requested")
Cc: Ian Campbell <ijc@hellion.org.uk>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff

drivers/clocksource/arm_arch_timer.c
... ... @@ -462,7 +462,7 @@
462 462  
463 463 /* Register the CP15 based counter if we have one */
464 464 if (type & ARCH_CP15_TIMER) {
465   - if (arch_timer_use_virtual)
  465 + if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
466 466 arch_timer_read_counter = arch_counter_get_cntvct;
467 467 else
468 468 arch_timer_read_counter = arch_counter_get_cntpct;