kvm: nVMX: Set nested_run_pending in vmx_set_nested_state after checks complete
nested_run_pending=1 implies we have successfully entered guest mode. Move setting from external state in vmx_set_nested_state() until after all other checks are complete. Based on a patch by Aaron Lewis. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>hifive-unleashed-5.2
parent
da1e3071d5
commit
9b5db6c762
|
@ -5420,9 +5420,6 @@ static int vmx_set_nested_state(struct kvm_vcpu *vcpu,
|
||||||
if (!(kvm_state->flags & KVM_STATE_NESTED_GUEST_MODE))
|
if (!(kvm_state->flags & KVM_STATE_NESTED_GUEST_MODE))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
vmx->nested.nested_run_pending =
|
|
||||||
!!(kvm_state->flags & KVM_STATE_NESTED_RUN_PENDING);
|
|
||||||
|
|
||||||
if (nested_cpu_has_shadow_vmcs(vmcs12) &&
|
if (nested_cpu_has_shadow_vmcs(vmcs12) &&
|
||||||
vmcs12->vmcs_link_pointer != -1ull) {
|
vmcs12->vmcs_link_pointer != -1ull) {
|
||||||
struct vmcs12 *shadow_vmcs12 = get_shadow_vmcs12(vcpu);
|
struct vmcs12 *shadow_vmcs12 = get_shadow_vmcs12(vcpu);
|
||||||
|
@ -5446,9 +5443,14 @@ static int vmx_set_nested_state(struct kvm_vcpu *vcpu,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
vmx->nested.dirty_vmcs12 = true;
|
vmx->nested.dirty_vmcs12 = true;
|
||||||
|
vmx->nested.nested_run_pending =
|
||||||
|
!!(kvm_state->flags & KVM_STATE_NESTED_RUN_PENDING);
|
||||||
|
|
||||||
ret = nested_vmx_enter_non_root_mode(vcpu, false);
|
ret = nested_vmx_enter_non_root_mode(vcpu, false);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
vmx->nested.nested_run_pending = 0;
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue