diff options
Diffstat (limited to 'arch/x86/kvm/svm.c')
| -rw-r--r-- | arch/x86/kvm/svm.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 506e4fe23adc..475d1c948501 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -1496,11 +1496,14 @@ static void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)  	update_cr0_intercept(svm);  } -static void svm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) +static int svm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)  {  	unsigned long host_cr4_mce = read_cr4() & X86_CR4_MCE;  	unsigned long old_cr4 = to_svm(vcpu)->vmcb->save.cr4; +	if (cr4 & X86_CR4_VMXE) +		return 1; +  	if (npt_enabled && ((old_cr4 ^ cr4) & X86_CR4_PGE))  		svm_flush_tlb(vcpu); @@ -1510,6 +1513,7 @@ static void svm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)  	cr4 |= host_cr4_mce;  	to_svm(vcpu)->vmcb->save.cr4 = cr4;  	mark_dirty(to_svm(vcpu)->vmcb, VMCB_CR); +	return 0;  }  static void svm_set_segment(struct kvm_vcpu *vcpu,  |