hv: mmu: replace cpu feature/capability detect with cpu_has_cap

Since we get cpu feature/capability in boot_cpu_data at boot initialization,
then there no need to get this feature/capability using cpuid again.

Signed-off-by: Li, Fei1 <fei1.li@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Li, Fei1 2018-04-13 13:21:50 +08:00 committed by lijinxia
parent 85194b43af
commit ecbdb73957

View File

@ -49,11 +49,6 @@ static struct vmx_capability {
uint32_t vpid;
} vmx_caps;
static struct mm_capability {
/* MMU 1-GByte page supported flag */
bool mmu_1gb_page_supported;
} mm_caps;
#define INVEPT_TYPE_SINGLE_CONTEXT 1UL
#define INVEPT_TYPE_ALL_CONTEXTS 2UL
#define INVEPT_SET_ERROR_CODE \
@ -102,21 +97,12 @@ static inline bool cpu_has_vmx_vpid_cap(uint32_t bit_mask)
static void check_mmu_capability(void)
{
uint64_t val;
uint32_t eax, ebx, ecx, edx;
/* Read the MSR register of EPT and VPID Capability - SDM A.10 */
val = msr_read(MSR_IA32_VMX_EPT_VPID_CAP);
vmx_caps.ept = (uint32_t) val;
vmx_caps.vpid = (uint32_t) (val >> 32);
/* Read CPUID to check if PAGE1GB is supported
* SDM 4.1.4 If CPUID.80000001H:EDX.Page1GB[bit26]=1,
* 1-GByte pages are supported with 4-level paging
*/
cpuid(CPUID_EXTEND_FUNCTION_1, &eax, &ebx, &ecx, &edx);
mm_caps.mmu_1gb_page_supported = (edx & CPUID_EDX_PAGE1GB) ?
(true) : (false);
if (!cpu_has_vmx_ept_cap(VMX_EPT_INVEPT))
panic("invept must be supported");
}
@ -145,7 +131,7 @@ static bool check_mmu_1gb_support(struct map_params *map_params)
if (map_params->page_table_type == PTT_EPT)
status = cpu_has_vmx_ept_cap(VMX_EPT_1GB_PAGE);
else
status = mm_caps.mmu_1gb_page_supported;
status = cpu_has_cap(X86_FEATURE_PAGE1GB);
return status;
}