diff options
Diffstat (limited to 'arch/x86/kvm/vmx/vmx.c')
| -rw-r--r-- | arch/x86/kvm/vmx/vmx.c | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 63aaf44edd1f..40b1e6138cd5 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -64,11 +64,13 @@  MODULE_AUTHOR("Qumranet");  MODULE_LICENSE("GPL"); +#ifdef MODULE  static const struct x86_cpu_id vmx_cpu_id[] = {  	X86_FEATURE_MATCH(X86_FEATURE_VMX),  	{}  };  MODULE_DEVICE_TABLE(x86cpu, vmx_cpu_id); +#endif  bool __read_mostly enable_vpid = 1;  module_param_named(vpid, enable_vpid, bool, 0444); @@ -7175,6 +7177,7 @@ static int vmx_check_intercept_io(struct kvm_vcpu *vcpu,  	else  		intercept = nested_vmx_check_io_bitmaps(vcpu, port, size); +	/* FIXME: produce nested vmexit and return X86EMUL_INTERCEPTED.  */  	return intercept ? X86EMUL_UNHANDLEABLE : X86EMUL_CONTINUE;  } @@ -7204,6 +7207,20 @@ static int vmx_check_intercept(struct kvm_vcpu *vcpu,  	case x86_intercept_outs:  		return vmx_check_intercept_io(vcpu, info); +	case x86_intercept_lgdt: +	case x86_intercept_lidt: +	case x86_intercept_lldt: +	case x86_intercept_ltr: +	case x86_intercept_sgdt: +	case x86_intercept_sidt: +	case x86_intercept_sldt: +	case x86_intercept_str: +		if (!nested_cpu_has2(vmcs12, SECONDARY_EXEC_DESC)) +			return X86EMUL_CONTINUE; + +		/* FIXME: produce nested vmexit and return X86EMUL_INTERCEPTED.  */ +		break; +  	/* TODO: check more intercepts... */  	default:  		break; |