From 4f65dd477a49af2f8dd7018ccbeefc2a71ca493a Mon Sep 17 00:00:00 2001 From: "Li, Fei1" Date: Thu, 8 Mar 2018 21:14:24 +0800 Subject: [PATCH] Simple get_vmx_cap() Don't check MSR Control Features in get_vmx_cap Signed-off-by: Li, Fei1 --- arch/x86/vmx.c | 27 ++------------------------- common/hv_main.c | 4 ++-- include/arch/x86/vmx.h | 2 +- 3 files changed, 5 insertions(+), 28 deletions(-) diff --git a/arch/x86/vmx.c b/arch/x86/vmx.c index db860a56a..75af69974 100644 --- a/arch/x86/vmx.c +++ b/arch/x86/vmx.c @@ -94,38 +94,15 @@ static inline int exec_vmxon(void *addr) return status; } -int check_vmx_support(void) +bool get_vmx_cap(void) { uint32_t eax, ebx, ecx, edx; - int ret_val = 0; - uint64_t tmp64; /* Run CPUID to determine if VTX support available */ cpuid(CPUID_FEATURES, &eax, &ebx, &ecx, &edx); /* See if VMX feature bit is set in ECX */ - if (!(ecx & CPUID_ECX_VMX)) { - /* Log and return error */ - pr_fatal("VMX not supported by CPU"); - ret_val = -EINVAL; - } else { - /* Read feature control MSR */ - tmp64 = msr_read(MSR_IA32_FEATURE_CONTROL); - - /* See if feature control MSR is locked and VMX not enabled - * appropriately - */ - if ((tmp64 & MSR_IA32_FEATURE_CONTROL_LOCK) && - (!(tmp64 & MSR_IA32_FEATURE_CONTROL_VMX_NO_SMX))) { - /* Log and return error */ - pr_fatal("MSR_IA32_FEATURE_CONTROL: Lock bit is on and VMXON bit is off"); - pr_fatal(" Cannot do vmxon"); - ret_val = -EINVAL; - } - } - - /* Return status to caller */ - return ret_val; + return !!(ecx & CPUID_ECX_VMX); } int exec_vmxon_instr(void) diff --git a/common/hv_main.c b/common/hv_main.c index 300190e96..15e267402 100644 --- a/common/hv_main.c +++ b/common/hv_main.c @@ -152,8 +152,8 @@ int hv_main(int cpu_id) "cpu_id/tsc_aux mismatch"); /* Check if virtualization extensions are supported */ - ret = check_vmx_support(); - ASSERT(ret == 0, "VMX not supported!"); + ret = get_vmx_cap(); + ASSERT(ret == 1, "VMX not supported!"); /* Enable virtualization extensions */ ret = exec_vmxon_instr(); diff --git a/include/arch/x86/vmx.h b/include/arch/x86/vmx.h index 6d21e1be7..284f13495 100644 --- a/include/arch/x86/vmx.h +++ b/include/arch/x86/vmx.h @@ -413,7 +413,7 @@ #define PAGE_PROTECTED_MODE 2 /* External Interfaces */ -int check_vmx_support(void); +bool get_vmx_cap(void); int exec_vmxon_instr(void); uint64_t exec_vmread(uint32_t field); uint64_t exec_vmread64(uint32_t field_full);