| From c4cbba9fa078f55d9f6d081dbb4aec7cf969e7c7 Mon Sep 17 00:00:00 2001 |
| From: Marc Zyngier <marc.zyngier@arm.com> |
| Date: Wed, 16 Sep 2015 16:18:59 +0100 |
| Subject: arm64: KVM: Disable virtual timer even if the guest is not using it |
| |
| From: Marc Zyngier <marc.zyngier@arm.com> |
| |
| commit c4cbba9fa078f55d9f6d081dbb4aec7cf969e7c7 upstream. |
| |
| When running a guest with the architected timer disabled (with QEMU and |
| the kernel_irqchip=off option, for example), it is important to make |
| sure the timer gets turned off. Otherwise, the guest may try to |
| enable it anyway, leading to a screaming HW interrupt. |
| |
| The fix is to unconditionally turn off the virtual timer on guest |
| exit. |
| |
| Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org> |
| Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/arm64/kvm/hyp.S | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/arch/arm64/kvm/hyp.S |
| +++ b/arch/arm64/kvm/hyp.S |
| @@ -844,8 +844,6 @@ |
| mrs x3, cntv_ctl_el0 |
| and x3, x3, #3 |
| str w3, [x0, #VCPU_TIMER_CNTV_CTL] |
| - bic x3, x3, #1 // Clear Enable |
| - msr cntv_ctl_el0, x3 |
| |
| isb |
| |
| @@ -853,6 +851,9 @@ |
| str x3, [x0, #VCPU_TIMER_CNTV_CVAL] |
| |
| 1: |
| + // Disable the virtual timer |
| + msr cntv_ctl_el0, xzr |
| + |
| // Allow physical timer/counter access for the host |
| mrs x2, cnthctl_el2 |
| orr x2, x2, #3 |