| From d6ad36913083d683aad4e02e53580c995f1a6ede Mon Sep 17 00:00:00 2001 |
| From: Catalin Marinas <catalin.marinas@arm.com> |
| Date: Wed, 10 Dec 2014 11:02:09 +0000 |
| Subject: clocksource: arch_timer: Only use the virtual counter |
| (CNTVCT) on arm64 |
| |
| From: Catalin Marinas <catalin.marinas@arm.com> |
| |
| 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> |
| |
| --- |
| drivers/clocksource/arm_arch_timer.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/clocksource/arm_arch_timer.c |
| +++ b/drivers/clocksource/arm_arch_timer.c |
| @@ -462,7 +462,7 @@ static void __init arch_counter_register |
| |
| /* Register the CP15 based counter if we have one */ |
| if (type & ARCH_CP15_TIMER) { |
| - if (arch_timer_use_virtual) |
| + if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual) |
| arch_timer_read_counter = arch_counter_get_cntvct; |
| else |
| arch_timer_read_counter = arch_counter_get_cntpct; |