2017-08-16 10:54-0500, Janakarajan Natarajan: > Enable the Virtual GIF feature. This is done by setting bit 25 at position > 60h in the vmcb. > > With this feature enabled, the processor uses bit 9 at position 60h as the > virtual GIF when executing STGI/CLGI instructions. > > Since the execution of STGI by the L1 hypervisor does not cause a return to > the outermost (L0) hypervisor, the enable_irq_window and enable_nmi_window > are modified. > > The IRQ and NMI windows will be opened even if GIF is not set, under the > assumption that on resuming the L1 hypervisor the IRQ and NMI will be > held pending until the processor executes the STGI instruction. > > Signed-off-by: Janakarajan Natarajan <Janakarajan.Natarajan@xxxxxxx> > --- > diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c > @@ -4702,8 +4735,8 @@ static void enable_nmi_window(struct kvm_vcpu *vcpu) > == HF_NMI_MASK) > return; /* IRET will cause a vm exit */ > > - if ((svm->vcpu.arch.hflags & HF_GIF_MASK) == 0) > - return; /* STGI will cause a vm exit */ > + if (!vgif_enabled(svm) && !gif_set(svm)) > + return; /* STGI will cause a vm exit or HW will set VGIF*/ Why don't we enable STGI interception to get notified that the window has opened? (I doubt that single stepping would be faster ...) Thanks.