KVM: nVMX: Rename and split top-level consistency checks to match SDM
Rename the top-level consistency check functions to (loosely) align with the SDM. Historically, KVM has used the terms "prereq" and "postreq" to differentiate between consistency checks that lead to VM-Fail and those that lead to VM-Exit. The terms are vague and potentially misleading, e.g. "postreq" might be interpreted as occurring after VM-Entry. Note, while the SDM lumps controls and host state into a single section, "Checks on VMX Controls and Host-State Area", split them into separate top-level functions as the two categories of checks result in different VM instruction errors. This split will allow for additional cleanup. Note #2, "vmentry" is intentionally dropped from the new function names to avoid confusion with nested_check_vm_entry_controls(), and to keep the length of the functions names somewhat manageable. Suggested-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> Reviewed-by: Krish Sadhukhan <krish.sadhukhan@oracle.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
9c3e922ba3
commit
5478ba349f
|
@ -2589,6 +2589,17 @@ static int nested_check_vm_entry_controls(struct kvm_vcpu *vcpu,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int nested_vmx_check_controls(struct kvm_vcpu *vcpu,
|
||||
struct vmcs12 *vmcs12)
|
||||
{
|
||||
if (nested_check_vm_execution_controls(vcpu, vmcs12) ||
|
||||
nested_check_vm_exit_controls(vcpu, vmcs12) ||
|
||||
nested_check_vm_entry_controls(vcpu, vmcs12))
|
||||
return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Checks related to Host Control Registers and MSRs
|
||||
*/
|
||||
|
@ -2628,14 +2639,9 @@ static int nested_check_host_control_regs(struct kvm_vcpu *vcpu,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int nested_vmx_check_vmentry_prereqs(struct kvm_vcpu *vcpu,
|
||||
struct vmcs12 *vmcs12)
|
||||
static int nested_vmx_check_host_state(struct kvm_vcpu *vcpu,
|
||||
struct vmcs12 *vmcs12)
|
||||
{
|
||||
if (nested_check_vm_execution_controls(vcpu, vmcs12) ||
|
||||
nested_check_vm_exit_controls(vcpu, vmcs12) ||
|
||||
nested_check_vm_entry_controls(vcpu, vmcs12))
|
||||
return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
|
||||
|
||||
if (nested_check_host_control_regs(vcpu, vmcs12))
|
||||
return VMXERR_ENTRY_INVALID_HOST_STATE_FIELD;
|
||||
|
||||
|
@ -2681,9 +2687,9 @@ static int nested_check_guest_non_reg_state(struct vmcs12 *vmcs12)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int nested_vmx_check_vmentry_postreqs(struct kvm_vcpu *vcpu,
|
||||
struct vmcs12 *vmcs12,
|
||||
u32 *exit_qual)
|
||||
static int nested_vmx_check_guest_state(struct kvm_vcpu *vcpu,
|
||||
struct vmcs12 *vmcs12,
|
||||
u32 *exit_qual)
|
||||
{
|
||||
bool ia32e;
|
||||
|
||||
|
@ -3008,7 +3014,7 @@ int nested_vmx_enter_non_root_mode(struct kvm_vcpu *vcpu, bool from_vmentry)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (nested_vmx_check_vmentry_postreqs(vcpu, vmcs12, &exit_qual))
|
||||
if (nested_vmx_check_guest_state(vcpu, vmcs12, &exit_qual))
|
||||
goto vmentry_fail_vmexit;
|
||||
}
|
||||
|
||||
|
@ -3153,7 +3159,11 @@ static int nested_vmx_run(struct kvm_vcpu *vcpu, bool launch)
|
|||
launch ? VMXERR_VMLAUNCH_NONCLEAR_VMCS
|
||||
: VMXERR_VMRESUME_NONLAUNCHED_VMCS);
|
||||
|
||||
ret = nested_vmx_check_vmentry_prereqs(vcpu, vmcs12);
|
||||
ret = nested_vmx_check_controls(vcpu, vmcs12);
|
||||
if (ret)
|
||||
return nested_vmx_failValid(vcpu, ret);
|
||||
|
||||
ret = nested_vmx_check_host_state(vcpu, vmcs12);
|
||||
if (ret)
|
||||
return nested_vmx_failValid(vcpu, ret);
|
||||
|
||||
|
@ -5488,8 +5498,9 @@ static int vmx_set_nested_state(struct kvm_vcpu *vcpu,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (nested_vmx_check_vmentry_prereqs(vcpu, vmcs12) ||
|
||||
nested_vmx_check_vmentry_postreqs(vcpu, vmcs12, &exit_qual))
|
||||
if (nested_vmx_check_controls(vcpu, vmcs12) ||
|
||||
nested_vmx_check_host_state(vcpu, vmcs12) ||
|
||||
nested_vmx_check_guest_state(vcpu, vmcs12, &exit_qual))
|
||||
return -EINVAL;
|
||||
|
||||
vmx->nested.dirty_vmcs12 = true;
|
||||
|
|
Loading…
Reference in New Issue