• Christoffer Dall's avatar
    KVM: arm/arm64: Avoid vcpu_load for other vcpu ioctls than KVM_RUN · e21a4f3a
    Christoffer Dall authored
    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: 9b062471 ("KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl")
    Reviewed-by: default avatarJulien Grall <julien.grall@arm.com>
    Reviewed-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Reviewed-by: default avatarAndrew Jones <drjones@redhat.com>
    Signed-off-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    e21a4f3a
arm.c 35.2 KB