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);
+bool kvm_cpu_has_ept(void);
 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);
 
        __nested_map(vmx, vm, addr, addr, size, PG_LEVEL_1G);
 }
 
-bool kvm_vm_has_ept(struct kvm_vm *vm)
+bool kvm_cpu_has_ept(void)
 {
-       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;
+       ctrl = kvm_get_feature_msr(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;
+       ctrl = kvm_get_feature_msr(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));
+       TEST_REQUIRE(kvm_cpu_has_ept());
 
        vmx->eptp = (void *)vm_vaddr_alloc_page(vm);
        vmx->eptp_hva = addr_gva2hva(vm, (uintptr_t)vmx->eptp);