The first commit fixes the tests when running on PMUv3p5. The issue is that PMUv3p5 uses 64-bit counters irrespective of whether the PMU is configured for overflowing at 32 or 64-bits. Tests are currently failing [0] on PMUv3p5 because of this. They wrongly assume that values will be wrapped around 32-bits, but they overflow into the other half of the 64-bit counters. The second and third commits add new tests for 64-bit overflows, a feature added with PMUv3p5 (PMCR_EL0.LP == 1). This is done by running all overflow-related tests in two modes: with 32-bit and 64-bit overflows. The fourt commit changes the value reporting to use %lx instead of %ld. This series was tested on PMUv3p5 and PMUv3p4 using the ARM Fast Model and kvmtool. All tests pass on both PMUv3p5 and PMUv3p4 when using Marc's PMUv3p5 series [0], plus the suggestion made at [1]. Didn't test AArch32. Changes from v2: - used Oliver's suggestion of using pmevcntr_mask() for masking counters to 32 or 64 bits, instead of casting to uint32_t or uint64_t. - removed ALL_SET_AT() in favor of pmevcntr_mask(). (Oliver) - moved the change to have odd counter overflows at 64-bits from first to third commit. - renamed PRE_OVERFLOW macro to PRE_OVERFLOW_32, and PRE_OVERFLOW_AT() to PRE_OVERFLOW(). Changes from v1 (all suggested by Alexandru): - report counter values in hexadecimal - s/overflow_at_64bits/unused for all chained tests - check that odd counters do not increment when using overflow_at_64bits (pmcr.LP=1) - test 64-bit odd counters overflows - switch confusing var names in test_chained_sw_incr(): cntr0 <-> cntr1 [0] https://lore.kernel.org/kvmarm/20221113163832.3154370-1-maz@xxxxxxxxxx/ [1] https://lore.kernel.org/kvmarm/Y4jasyxvFRNvvmox@xxxxxxxxxx/ Ricardo Koller (4): arm: pmu: Fix overflow checks for PMUv3p5 long counters arm: pmu: Prepare for testing 64-bit overflows arm: pmu: Add tests for 64-bit overflows arm: pmu: Print counter values as hexadecimals arm/pmu.c | 260 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 163 insertions(+), 97 deletions(-) -- 2.39.0.314.g84b9a713c41-goog