diff options
Diffstat (limited to 'arch/x86/kvm/svm/nested.c')
| -rw-r--r-- | arch/x86/kvm/svm/nested.c | 7 | 
1 files changed, 6 insertions, 1 deletions
| diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c index fb68467e6049..e90bc436f584 100644 --- a/arch/x86/kvm/svm/nested.c +++ b/arch/x86/kvm/svm/nested.c @@ -586,7 +586,6 @@ int nested_svm_vmexit(struct vcpu_svm *svm)  	svm->vcpu.arch.mp_state = KVM_MP_STATE_RUNNABLE;  	/* Give the current vmcb to the guest */ -	svm_set_gif(svm, false);  	nested_vmcb->save.es     = vmcb->save.es;  	nested_vmcb->save.cs     = vmcb->save.cs; @@ -632,6 +631,9 @@ int nested_svm_vmexit(struct vcpu_svm *svm)  	/* Restore the original control entries */  	copy_vmcb_control_area(&vmcb->control, &hsave->control); +	/* On vmexit the  GIF is set to false */ +	svm_set_gif(svm, false); +  	svm->vmcb->control.tsc_offset = svm->vcpu.arch.tsc_offset =  		svm->vcpu.arch.l1_tsc_offset; @@ -1132,6 +1134,9 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu,  	load_nested_vmcb_control(svm, &ctl);  	nested_prepare_vmcb_control(svm); +	if (!nested_svm_vmrun_msrpm(svm)) +		return -EINVAL; +  out_set_gif:  	svm_set_gif(svm, !!(kvm_state->flags & KVM_STATE_NESTED_GIF_SET));  	return 0; |