On Tue, Aug 28, 2018 at 9:04 AM, Sean Christopherson <sean.j.christopherson@xxxxxxxxx> wrote: > In preparation of supporting checkpoint/restore for nested state, > commit ca0bde28f2ed ("kvm: nVMX: Split VMCS checks from nested_vmx_run()") > modified check_vmentry_postreqs() to only perform the guest EFER > consistency checks when nested_run_pending is true. But, in the > normal nested VMEntry flow, nested_run_pending is only set after > check_vmentry_postreqs(), i.e. the consistency check is being skipped. > > Alternatively, nested_run_pending could be set prior to calling > check_vmentry_postreqs() in nested_vmx_run(), but placing the > consistency checks in nested_vmx_enter_non_root_mode() allows us > to split prepare_vmcs02() and interleave the preparation with > the consistency checks without having to change the call sites > of nested_vmx_enter_non_root_mode(). In other words, the rest > of the consistency check code in nested_vmx_run() will be joining > the postreqs checks in future patches. > > Fixes: ca0bde28f2ed ("kvm: nVMX: Split VMCS checks from nested_vmx_run()") > Signed-off-by: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> > Cc: Jim Mattson <jmattson@xxxxxxxxxx> > --- > arch/x86/kvm/vmx.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index 5fe44462f713..43e87a2e172e 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -12556,7 +12556,16 @@ static int nested_vmx_enter_non_root_mode(struct kvm_vcpu *vcpu, u32 *exit_qual) > struct vmcs12 *vmcs12 = get_vmcs12(vcpu); > bool from_vmentry = !!exit_qual; > u32 dummy_exit_qual; > - int r = 0; > + int r; > + > + if (from_vmentry) { > + r = check_vmentry_postreqs(vcpu, vmcs12, exit_qual); > + if (r) { > + nested_vmx_entry_failure(vcpu, vmcs12, > + EXIT_REASON_INVALID_STATE, *exit_qual); > + return 1; > + } > + } Can this be simplified to: ... if (r) return EXIT_REASON_INVALID_STATE; Reviewed-by: Jim Mattson <jmattson@xxxxxxxxxx>