Use the generic host_cpu_feature_supported() helper to check for the EL2 feature support. This will allow to expand to non-KVM accelerators such HVF.
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> --- target/arm/kvm_arm.h | 11 ----------- hw/arm/virt.c | 8 +------- target/arm/kvm-stub.c | 5 ----- target/arm/kvm.c | 6 +++--- 4 files changed, 4 insertions(+), 26 deletions(-) diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index 364578c50d6..7e5755d76b2 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -191,12 +191,6 @@ bool kvm_arm_sve_supported(void); */ bool kvm_arm_mte_supported(void); -/** - * kvm_arm_el2_supported: - * - * Returns true if KVM can enable EL2 and false otherwise. - */ -bool kvm_arm_el2_supported(void); #else static inline bool kvm_arm_aarch32_supported(void) @@ -213,11 +207,6 @@ static inline bool kvm_arm_mte_supported(void) { return false; } - -static inline bool kvm_arm_el2_supported(void) -{ - return false; -} #endif /** diff --git a/hw/arm/virt.c b/hw/arm/virt.c index ef6be3660f5..62350f642ef 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2267,13 +2267,7 @@ static void machvirt_init(MachineState *machine) exit(1); } - if (vms->virt && kvm_enabled() && !kvm_arm_el2_supported()) { - error_report("mach-virt: host kernel KVM does not support providing " - "Virtualization extensions to the guest CPU"); - exit(1); - } - - if (vms->virt && !kvm_enabled() && !tcg_enabled() && !qtest_enabled()) { + if (vms->virt && !host_cpu_feature_supported(ARM_FEATURE_EL2)) { error_report("mach-virt: %s does not support providing " "Virtualization extensions to the guest CPU", current_accel_name()); diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index 3beb336416d..35afcc7d6f9 100644 --- a/target/arm/kvm-stub.c +++ b/target/arm/kvm-stub.c @@ -42,11 +42,6 @@ bool kvm_arm_mte_supported(void) return false; } -bool kvm_arm_el2_supported(void) -{ - return false; -} - /* * These functions should never actually be called without KVM support. */ diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 0aa2680a8e6..53aebd77bf1 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -274,7 +274,7 @@ static bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf) /* * Ask for EL2 if supported. */ - el2_supported = kvm_arm_el2_supported(); + el2_supported = host_cpu_feature_supported(ARM_FEATURE_EL2); if (el2_supported) { init.features[0] |= 1 << KVM_ARM_VCPU_HAS_EL2; } @@ -1780,7 +1780,7 @@ bool host_cpu_feature_supported(enum arm_features feature) case ARM_FEATURE_PMU: return kvm_check_extension(kvm_state, KVM_CAP_ARM_PMU_V3); case ARM_FEATURE_EL2: - return kvm_arm_el2_supported(); + return kvm_check_extension(kvm_state, KVM_CAP_ARM_EL2); case ARM_FEATURE_EL3: return false; default: @@ -1918,7 +1918,7 @@ int kvm_arch_init_vcpu(CPUState *cs) cpu->kvm_init_features[0] |= (1 << KVM_ARM_VCPU_PTRAUTH_ADDRESS | 1 << KVM_ARM_VCPU_PTRAUTH_GENERIC); } - if (cpu->has_el2 && kvm_arm_el2_supported()) { + if (cpu->has_el2 && host_cpu_feature_supported(ARM_FEATURE_EL2)) { cpu->kvm_init_features[0] |= 1 << KVM_ARM_VCPU_HAS_EL2; } -- 2.49.0