KVM: arm/arm64: Avoid vcpu_load for other vcpu ioctls than KVM_RUN
authorChristoffer Dall <christoffer.dall@linaro.org>
Tue, 27 Feb 2018 11:33:50 +0000 (12:33 +0100)
committerMarc Zyngier <marc.zyngier@arm.com>
Wed, 14 Mar 2018 18:29:14 +0000 (18:29 +0000)
commite21a4f3a930cda6e4902cb5b3213365e5ff3ce7c
tree6200880064b9c113f5498186ac1ac704427d61ca
parent62b06f8f429cd233e4e2e7bbd21081ad60c9018f
KVM: arm/arm64: Avoid vcpu_load for other vcpu ioctls than KVM_RUN

Calling vcpu_load() registers preempt notifiers for this vcpu and calls
kvm_arch_vcpu_load().  The latter will soon be doing a lot of heavy
lifting on arm/arm64 and will try to do things such as enabling the
virtual timer and setting us up to handle interrupts from the timer
hardware.

Loading state onto hardware registers and enabling hardware to signal
interrupts can be problematic when we're not actually about to run the
VCPU, because it makes it difficult to establish the right context when
handling interrupts from the timer, and it makes the register access
code difficult to reason about.

Luckily, now when we call vcpu_load in each ioctl implementation, we can
simply remove the call from the non-KVM_RUN vcpu ioctls, and our
kvm_arch_vcpu_load() is only used for loading vcpu content to the
physical CPU when we're actually going to run the vcpu.

Cc: stable@vger.kernel.org
Fixes: 9b062471e52a ("KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl")
Reviewed-by: Julien Grall <julien.grall@arm.com>
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm64/kvm/guest.c
virt/kvm/arm/arm.c