|
|
@@ -1239,6 +1239,11 @@ static inline bool cpu_has_vmx_invvpid_global(void)
|
|
|
return vmx_capability.vpid & VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT;
|
|
|
}
|
|
|
|
|
|
+static inline bool cpu_has_vmx_invvpid(void)
|
|
|
+{
|
|
|
+ return vmx_capability.vpid & VMX_VPID_INVVPID_BIT;
|
|
|
+}
|
|
|
+
|
|
|
static inline bool cpu_has_vmx_ept(void)
|
|
|
{
|
|
|
return vmcs_config.cpu_based_2nd_exec_ctrl &
|
|
|
@@ -6524,8 +6529,10 @@ static __init int hardware_setup(void)
|
|
|
if (boot_cpu_has(X86_FEATURE_NX))
|
|
|
kvm_enable_efer_bits(EFER_NX);
|
|
|
|
|
|
- if (!cpu_has_vmx_vpid())
|
|
|
+ if (!cpu_has_vmx_vpid() || !cpu_has_vmx_invvpid() ||
|
|
|
+ !(cpu_has_vmx_invvpid_single() || cpu_has_vmx_invvpid_global()))
|
|
|
enable_vpid = 0;
|
|
|
+
|
|
|
if (!cpu_has_vmx_shadow_vmcs())
|
|
|
enable_shadow_vmcs = 0;
|
|
|
if (enable_shadow_vmcs)
|