On Tue, Apr 28, 2020 at 3:59 PM Sean Christopherson <sean.j.christopherson@xxxxxxxxx> wrote: > > On Tue, Apr 28, 2020 at 03:04:02PM -0700, Jim Mattson wrote: > > On Wed, Apr 22, 2020 at 7:26 PM Sean Christopherson > > <sean.j.christopherson@xxxxxxxxx> wrote: > > > > > > Check for an unblocked SMI in vmx_check_nested_events() so that pending > > > SMIs are correctly prioritized over IRQs and NMIs when the latter events > > > will trigger VM-Exit. This also fixes an issue where an SMI that was > > > marked pending while processing a nested VM-Enter wouldn't trigger an > > > immediate exit, i.e. would be incorrectly delayed until L2 happened to > > > take a VM-Exit. > > > > > > Fixes: 64d6067057d96 ("KVM: x86: stubs for SMM support") > > > Signed-off-by: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> > > > --- > > > arch/x86/kvm/vmx/nested.c | 6 ++++++ > > > 1 file changed, 6 insertions(+) > > > > > > diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c > > > index 1fdaca5fd93d..8c16b190816b 100644 > > > --- a/arch/x86/kvm/vmx/nested.c > > > +++ b/arch/x86/kvm/vmx/nested.c > > > @@ -3750,6 +3750,12 @@ static int vmx_check_nested_events(struct kvm_vcpu *vcpu) > > > return 0; > > > } > > > > > > + if (vcpu->arch.smi_pending && !is_smm(vcpu)) { > > > + if (block_nested_events) > > > + return -EBUSY; > > > + goto no_vmexit; > > > + } > > > + > > > > From the SDM, volume 3: > > > > • System-management interrupts (SMIs), INIT signals, and higher > > priority events take priority over MTF VM exits. > > > > I think this block needs to be moved up. > > Hrm. It definitely needs to be moved above the preemption timer, though I > can't find any public documentation about the preemption timer's priority. Section 25.2 of the SDM, volume 3: Debug-trap exceptions and higher priority events take priority over VM exits caused by the VMX-preemption timer. VM exits caused by the VMX-preemption timer take priority over VM exits caused by the “NMI-window exiting” VM-execution control and lower priority events.