Use the generic host_cpu_feature_supported() helper to check for the PMU 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 | 13 ------------- target/arm/cpu.c | 6 ++++-- target/arm/kvm-stub.c | 5 ----- target/arm/kvm.c | 9 ++------- 4 files changed, 6 insertions(+), 27 deletions(-) diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index 6a9b6374a6d..364578c50d6 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -177,14 +177,6 @@ void kvm_arm_steal_time_finalize(ARMCPU *cpu, Error **errp); */ bool kvm_arm_aarch32_supported(void); -/** - * kvm_arm_pmu_supported: - * - * Returns: true if KVM can enable the PMU - * and false otherwise. - */ -bool kvm_arm_pmu_supported(void); - /** * kvm_arm_sve_supported: * @@ -212,11 +204,6 @@ static inline bool kvm_arm_aarch32_supported(void) return false; } -static inline bool kvm_arm_pmu_supported(void) -{ - return false; -} - static inline bool kvm_arm_sve_supported(void) { return false; diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 1dc2a8330d8..ace8e73b532 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -24,6 +24,7 @@ #include "qemu/log.h" #include "exec/page-vary.h" #include "target/arm/idau.h" +#include "qemu/accel.h" #include "qemu/module.h" #include "qapi/error.h" #include "cpu.h" @@ -1564,8 +1565,9 @@ static void arm_set_pmu(Object *obj, bool value, Error **errp) ARMCPU *cpu = ARM_CPU(obj); if (value) { - if (kvm_enabled() && !kvm_arm_pmu_supported()) { - error_setg(errp, "'pmu' feature not supported by KVM on this host"); + if (host_cpu_feature_supported(ARM_FEATURE_PMU)) { + error_setg(errp, "'pmu' feature not supported by %s on this host", + current_accel_name()); return; } set_feature(&cpu->env, ARM_FEATURE_PMU); diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index c93462c5b9b..3beb336416d 100644 --- a/target/arm/kvm-stub.c +++ b/target/arm/kvm-stub.c @@ -32,11 +32,6 @@ bool kvm_arm_aarch32_supported(void) return false; } -bool kvm_arm_pmu_supported(void) -{ - return false; -} - bool kvm_arm_sve_supported(void) { return false; diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 93da9d67806..0aa2680a8e6 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -288,7 +288,7 @@ static bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf) 1 << KVM_ARM_VCPU_PTRAUTH_GENERIC); } - if (kvm_arm_pmu_supported()) { + if (host_cpu_feature_supported(ARM_FEATURE_PMU)) { init.features[0] |= 1 << KVM_ARM_VCPU_PMU_V3; pmu_supported = true; features |= 1ULL << ARM_FEATURE_PMU; @@ -506,11 +506,6 @@ void kvm_arm_add_vcpu_properties(ARMCPU *cpu) "Set off to disable KVM steal time."); } -bool kvm_arm_pmu_supported(void) -{ - return kvm_check_extension(kvm_state, KVM_CAP_ARM_PMU_V3); -} - int kvm_arm_get_max_vm_ipa_size(MachineState *ms, bool *fixed_ipa) { KVMState *s = KVM_STATE(ms->accelerator); @@ -1783,7 +1778,7 @@ bool host_cpu_feature_supported(enum arm_features feature) case ARM_FEATURE_GENERIC_TIMER: return true; case ARM_FEATURE_PMU: - return kvm_arm_pmu_supported(); + return kvm_check_extension(kvm_state, KVM_CAP_ARM_PMU_V3); case ARM_FEATURE_EL2: return kvm_arm_el2_supported(); case ARM_FEATURE_EL3: -- 2.49.0