Re: [PATCH v2 2/9] KVM: x86: remove return value of kvm_vcpu_block

From: Sean Christopherson
Date: Mon Sep 19 2022 - 20:42:51 EST


On Wed, Aug 17, 2022, Sean Christopherson wrote:
> Side topic, usage of kvm_apic_accept_events() appears to be broken (though nothing
> can trigger the bug). If kvm_apic_accept_events() were to return an -errno, then
> kvm_arch_vcpu_ioctl_run() would return '0' to userspace without updating
> vcpu->run->exit_reason. I think an easy fix is to drop the return value entirely
> and then WARN if kvm_check_nested_events() returns something other than -EBUSY.
>
> if (is_guest_mode(vcpu)) {
> r = kvm_check_nested_events(vcpu);
> if (r < 0) {
> WARN_ON_ONCE(r != -EBUSY);
> return;
> }

For posterity, I was wrong. Way down the stack, vmx_complete_nested_posted_interrupt()
can return -ENXIO after filling vcpu->run->exit_reason via kvm_handle_memory_failure().
That's the entire reason why negative values from kvm_check_nested_events() and
kvm_apic_accept_events() are morphed to '0', i.e. to "exit to userspace".