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. Preemption timer is lower priority than MTF, ergo it's not in the same class as SMI. Regarding SMI vs. MTF and #DB trap, to actually prioritize SMIs above MTF and #DBs, we'd need to save/restore MTF and pending #DBs via SMRAM. I think it makes sense to take the easy road and keep SMI after the traps, with a comment to say it's technically wrong but not worth fixing.