Message ID | 20230126165351.2561582-1-ricarkol@google.com (mailing list archive) |
---|---|
Headers | show |
Series | arm: pmu: Add support for PMUv3p5 | expand |
On Thu, Jan 26, 2023 at 04:53:45PM +0000, Ricardo Koller wrote: > 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 v3: > - Added commit to fix test_overflow_interrupt(). (Reiji and Eric) > - Separated s/ALL_SET/ALL_SET_32/ and s/PRE_OVERFLOW/PRE_OVERFLOW_32 > into its own commit. (Reiji and Eric) > - Fix s/200/20. (Eric) > > 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@kernel.org/ > [1] https://lore.kernel.org/kvmarm/Y4jasyxvFRNvvmox@google.com/ > > Ricardo Koller (6): > arm: pmu: Fix overflow checks for PMUv3p5 long counters > arm: pmu: Prepare for testing 64-bit overflows > arm: pmu: Rename ALL_SET and PRE_OVERFLOW > arm: pmu: Add tests for 64-bit overflows > arm: pmu: Print counter values as hexadecimals > arm: pmu: Fix test_overflow_interrupt() > > arm/pmu.c | 298 ++++++++++++++++++++++++++++++++++-------------------- > 1 file changed, 188 insertions(+), 110 deletions(-) > > -- > 2.39.1.456.gfc5497dd1b-goog > Applied, thanks