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é --- target/arm/kvm_arm.h | 13 ------------- target/arm/cpu.c | 4 ++-- target/arm/kvm-stub.c | 5 ----- target/arm/kvm.c | 9 ++------- 4 files changed, 4 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..c78a3c9cda8 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -1564,8 +1564,8 @@ 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, false)) { + error_setg(errp, "'pmu' feature not supported by this host accelerator"); 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 82853e68d8d..0fe0f89f931 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, false)) { 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 arm_hw_accel_cpu_feature_supported(enum arm_features feat, bool can_emulate 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