]> Git Repo - linux.git/commit
KVM: VMX: Wake vCPU when delivering posted IRQ even if vCPU == this vCPU
authorSean Christopherson <[email protected]>
Tue, 21 Dec 2021 15:37:00 +0000 (10:37 -0500)
committerPaolo Bonzini <[email protected]>
Tue, 21 Dec 2021 17:39:03 +0000 (12:39 -0500)
commitfdba608f15e2427419997b0898750a49a735afcb
treea85a6ebf72671cfa68f5f531e481690982013234
parentab1ef34416a65ba11f66ae6435fcf0251cb46fd4
KVM: VMX: Wake vCPU when delivering posted IRQ even if vCPU == this vCPU

Drop a check that guards triggering a posted interrupt on the currently
running vCPU, and more importantly guards waking the target vCPU if
triggering a posted interrupt fails because the vCPU isn't IN_GUEST_MODE.
If a vIRQ is delivered from asynchronous context, the target vCPU can be
the currently running vCPU and can also be blocking, in which case
skipping kvm_vcpu_wake_up() is effectively dropping what is supposed to
be a wake event for the vCPU.

The "do nothing" logic when "vcpu == running_vcpu" mostly works only
because the majority of calls to ->deliver_posted_interrupt(), especially
when using posted interrupts, come from synchronous KVM context.  But if
a device is exposed to the guest using vfio-pci passthrough, the VFIO IRQ
and vCPU are bound to the same pCPU, and the IRQ is _not_ configured to
use posted interrupts, wake events from the device will be delivered to
KVM from IRQ context, e.g.

  vfio_msihandler()
  |
  |-> eventfd_signal()
      |
      |-> ...
          |
          |->  irqfd_wakeup()
               |
               |->kvm_arch_set_irq_inatomic()
                  |
                  |-> kvm_irq_delivery_to_apic_fast()
                      |
                      |-> kvm_apic_set_irq()

This also aligns the non-nested and nested usage of triggering posted
interrupts, and will allow for additional cleanups.

Fixes: 379a3c8ee444 ("KVM: VMX: Optimize posted-interrupt delivery for timer fastpath")
Cc: [email protected]
Reported-by: Longpeng (Mike) <[email protected]>
Signed-off-by: Sean Christopherson <[email protected]>
Reviewed-by: Maxim Levitsky <[email protected]>
Message-Id: <20211208015236.1616697[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
arch/x86/kvm/vmx/vmx.c
This page took 0.04526 seconds and 4 git commands to generate.