]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
arm/arm64: KVM: Require in-kernel vgic for the arch timers
authorChristoffer Dall <christoffer.dall@linaro.org>
Mon, 4 May 2015 01:25:17 +0000 (09:25 +0800)
committerSasha Levin <sasha.levin@oracle.com>
Mon, 11 May 2015 11:07:34 +0000 (07:07 -0400)
commit765420c3359e89d778e683c41edc39f51df84140
treefe00bc9b481d66368d8274d3d31f0e5b7f4ad790
parent11d483cec89a33c6fc1bdd08901b0da723d6f2b9
arm/arm64: KVM: Require in-kernel vgic for the arch timers

commit 05971120fca43e0357789a14b3386bb56eef2201 upstream.

It is curently possible to run a VM with architected timers support
without creating an in-kernel VGIC, which will result in interrupts from
the virtual timer going nowhere.

To address this issue, move the architected timers initialization to the
time when we run a VCPU for the first time, and then only initialize
(and enable) the architected timers if we have a properly created and
initialized in-kernel VGIC.

When injecting interrupts from the virtual timer to the vgic, the
current setup should ensure that this never calls an on-demand init of
the VGIC, which is the only call path that could return an error from
kvm_vgic_inject_irq(), so capture the return value and raise a warning
if there's an error there.

We also change the kvm_timer_init() function from returning an int to be
a void function, since the function always succeeds.

Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
arch/arm/kvm/arm.c
include/kvm/arm_arch_timer.h
virt/kvm/arm/arch_timer.c