KVM: selftests: Skip tests that require EPT when it is not available
Skip selftests that require EPT support in the VM when it is not available. For example, if running on a machine where kvm_intel.ept=N since KVM does not offer EPT support to guests if EPT is not supported on the host. This commit causes vmx_dirty_log_test to be skipped instead of failing on hosts where kvm_intel.ept=N. Signed-off-by: David Matlack <dmatlack@google.com> Message-Id: <20220926171457.532542-1-dmatlack@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
69604fe76e
commit
0f816e024f
@ -617,6 +617,7 @@ void nested_map_memslot(struct vmx_pages *vmx, struct kvm_vm *vm,
|
||||
uint32_t memslot);
|
||||
void nested_identity_map_1g(struct vmx_pages *vmx, struct kvm_vm *vm,
|
||||
uint64_t addr, uint64_t size);
|
||||
bool kvm_vm_has_ept(struct kvm_vm *vm);
|
||||
void prepare_eptp(struct vmx_pages *vmx, struct kvm_vm *vm,
|
||||
uint32_t eptp_memslot);
|
||||
void prepare_virtualize_apic_accesses(struct vmx_pages *vmx, struct kvm_vm *vm);
|
||||
|
@ -5,6 +5,8 @@
|
||||
* Copyright (C) 2018, Google LLC.
|
||||
*/
|
||||
|
||||
#include <asm/msr-index.h>
|
||||
|
||||
#include "test_util.h"
|
||||
#include "kvm_util.h"
|
||||
#include "processor.h"
|
||||
@ -542,9 +544,27 @@ void nested_identity_map_1g(struct vmx_pages *vmx, struct kvm_vm *vm,
|
||||
__nested_map(vmx, vm, addr, addr, size, PG_LEVEL_1G);
|
||||
}
|
||||
|
||||
bool kvm_vm_has_ept(struct kvm_vm *vm)
|
||||
{
|
||||
struct kvm_vcpu *vcpu;
|
||||
uint64_t ctrl;
|
||||
|
||||
vcpu = list_first_entry(&vm->vcpus, struct kvm_vcpu, list);
|
||||
TEST_ASSERT(vcpu, "Cannot determine EPT support without vCPUs.\n");
|
||||
|
||||
ctrl = vcpu_get_msr(vcpu, MSR_IA32_VMX_TRUE_PROCBASED_CTLS) >> 32;
|
||||
if (!(ctrl & CPU_BASED_ACTIVATE_SECONDARY_CONTROLS))
|
||||
return false;
|
||||
|
||||
ctrl = vcpu_get_msr(vcpu, MSR_IA32_VMX_PROCBASED_CTLS2) >> 32;
|
||||
return ctrl & SECONDARY_EXEC_ENABLE_EPT;
|
||||
}
|
||||
|
||||
void prepare_eptp(struct vmx_pages *vmx, struct kvm_vm *vm,
|
||||
uint32_t eptp_memslot)
|
||||
{
|
||||
TEST_REQUIRE(kvm_vm_has_ept(vm));
|
||||
|
||||
vmx->eptp = (void *)vm_vaddr_alloc_page(vm);
|
||||
vmx->eptp_hva = addr_gva2hva(vm, (uintptr_t)vmx->eptp);
|
||||
vmx->eptp_gpa = addr_gva2gpa(vm, (uintptr_t)vmx->eptp);
|
||||
|
Loading…
Reference in New Issue
Block a user