On Wed, 2018-07-18 at 13:26 -0700, Sean Christopherson wrote: > KVM relies on hardware to perform the "vTPR < threshold" consistency > check, i.e. the check will occur after KVM has done some amount of > guest state checking in software. As such, KVM will signal a VMExit > consistency check (due to bad guest state) instead of the expected > VMFAIL (due to bad controls). This analysis is wrong, the actual issue is that L1 and L2 were sharing an APIC access page, which was causing the vTPR check to pull the value from L1 instead of L2. That bug was fixed by commit ab5df31cee7f ("kvm: nVMX: Eliminate APIC access page sharing between L1 and L2"). The vTPR tests should pass with kvm/{master,next,queue}. Lucky for me, Paolo didn't queue this patch, so nothing further needs to be done. > Cc: Krish Sadhukhan <krish.sadhukhan@xxxxxxxxxx> > Signed-off-by: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> > --- > x86/vmx_tests.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c > index c4803a3..031bf66 100644 > --- a/x86/vmx_tests.c > +++ b/x86/vmx_tests.c > @@ -3726,7 +3726,7 @@ static void try_tpr_threshold_and_vtpr(unsigned threshold, unsigned vtpr) > set_vtpr(vtpr); > report_prefix_pushf("TPR threshold 0x%x, VTPR.class 0x%x", > threshold, (vtpr >> 4) & 0xf); > - test_vmx_controls(valid, false); > + test_vmx_controls(valid, !valid); > report_prefix_pop(); > } >