Commit c363d959 authored by David Matlack's avatar David Matlack Committed by Paolo Bonzini

KVM: selftests: Add a helper to check EPT/VPID capabilities

Create a small helper function to check if a given EPT/VPID capability
is supported. This will be re-used in a follow-up commit to check for 1G
page support.

No functional change intended.
Reviewed-by: default avatarPeter Xu <peterx@redhat.com>
Signed-off-by: default avatarDavid Matlack <dmatlack@google.com>
Message-Id: <20220520233249.3776001-7-dmatlack@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent b6c086d0
...@@ -198,6 +198,11 @@ bool load_vmcs(struct vmx_pages *vmx) ...@@ -198,6 +198,11 @@ bool load_vmcs(struct vmx_pages *vmx)
return true; return true;
} }
static bool ept_vpid_cap_supported(uint64_t mask)
{
return rdmsr(MSR_IA32_VMX_EPT_VPID_CAP) & mask;
}
/* /*
* Initialize the control fields to the most basic settings possible. * Initialize the control fields to the most basic settings possible.
*/ */
...@@ -215,7 +220,7 @@ static inline void init_vmcs_control_fields(struct vmx_pages *vmx) ...@@ -215,7 +220,7 @@ static inline void init_vmcs_control_fields(struct vmx_pages *vmx)
struct eptPageTablePointer eptp = { struct eptPageTablePointer eptp = {
.memory_type = VMX_BASIC_MEM_TYPE_WB, .memory_type = VMX_BASIC_MEM_TYPE_WB,
.page_walk_length = 3, /* + 1 */ .page_walk_length = 3, /* + 1 */
.ad_enabled = !!(rdmsr(MSR_IA32_VMX_EPT_VPID_CAP) & VMX_EPT_VPID_CAP_AD_BITS), .ad_enabled = ept_vpid_cap_supported(VMX_EPT_VPID_CAP_AD_BITS),
.address = vmx->eptp_gpa >> PAGE_SHIFT_4K, .address = vmx->eptp_gpa >> PAGE_SHIFT_4K,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment