On Thu, 26 Jun 2025 21:04:45 +0100, Colton Lewis coltonlewis@google.com wrote:
Since cntr_mask is modified when the PMU is partitioned to remove some bits, make sure the missing counters are added back to get the right total.
Please fix the subject of the patch to be more descriptive. It is worded like a bug fix, while it really is only a step in the patch series.
Something like "Take partitioning into account for max number of counters" would go a long way.
Signed-off-by: Colton Lewis coltonlewis@google.com
arch/arm64/kvm/pmu.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/kvm/pmu.c b/arch/arm64/kvm/pmu.c index 79b7ea037153..67216451b8ce 100644 --- a/arch/arm64/kvm/pmu.c +++ b/arch/arm64/kvm/pmu.c @@ -533,6 +533,8 @@ static bool pmu_irq_is_valid(struct kvm *kvm, int irq) u8 kvm_arm_pmu_get_max_counters(struct kvm *kvm) { struct arm_pmu *arm_pmu = kvm->arch.arm_pmu;
- u8 counters;
nit: superfluous blank line.
/* * PMUv3 requires that all event counters are capable of counting any @@ -545,7 +547,12 @@ u8 kvm_arm_pmu_get_max_counters(struct kvm *kvm) * The arm_pmu->cntr_mask considers the fixed counter(s) as well. * Ignore those and return only the general-purpose counters. */
- return bitmap_weight(arm_pmu->cntr_mask, ARMV8_PMU_MAX_GENERAL_COUNTERS);
- counters = bitmap_weight(arm_pmu->cntr_mask, ARMV8_PMU_MAX_GENERAL_COUNTERS);
- if (kvm_pmu_is_partitioned(arm_pmu))
counters += arm_pmu->hpmn_max;
Why the check? Why can't we rely on hpmn_max to always give us the correct value?
Thanks,
M.