Fix the nested posted interrupts bug Jim reported a while back[*], where KVM fails to detect that a pending virtual interrupt for a halted L2 is a valid wake event. My original analysis and the basic gits of my hack-a- patch was correct, I just botched a few mundane details (I kept forgetting the PIR is physically contiguous, while the ISR and IRR are not, *sigh*). [*] https://lore.kernel.org/all/20231207010302.2240506-1-jmattson@xxxxxxxxxx Sean Christopherson (6): KVM: nVMX: Add a helper to get highest pending from Posted Interrupt vector KVM: nVMX: Request immediate exit iff pending nested event needs injection KVM: VMX: Split out the non-virtualization part of vmx_interrupt_blocked() KVM: nVMX: Check for pending posted interrupts when looking for nested events KVM: nVMX: Fold requested virtual interrupt check into has_nested_events() KVM: x86: WARN if a vCPU gets a valid wakeup that KVM can't yet inject arch/x86/include/asm/kvm-x86-ops.h | 1 - arch/x86/include/asm/kvm_host.h | 3 +- arch/x86/kvm/vmx/main.c | 1 - arch/x86/kvm/vmx/nested.c | 47 ++++++++++++++++++++++++++---- arch/x86/kvm/vmx/posted_intr.h | 10 +++++++ arch/x86/kvm/vmx/vmx.c | 33 ++++++--------------- arch/x86/kvm/vmx/vmx.h | 1 + arch/x86/kvm/vmx/x86_ops.h | 1 - arch/x86/kvm/x86.c | 19 +++++------- 9 files changed, 70 insertions(+), 46 deletions(-) base-commit: af0903ab52ee6d6f0f63af67fa73d5eb00f79b9a -- 2.45.2.505.gda0bf45e8d-goog