Message ID | 20240626-arm-pmu-3-9-icntr-v2-0-c9784b4f4065@kernel.org (mailing list archive) |
---|---|
Headers | show |
Series | arm64: Add support for Armv9.4 PMU fixed instruction counter | expand |
On Wed, 26 Jun 2024 16:32:24 -0600, Rob Herring (Arm) wrote: > This series adds support for the optional fixed instruction counter > added in Armv9.4 PMU. Most of the series is a refactoring to remove the > index to counter number conversion which dates back to the Armv7 PMU > driver. Removing it is necessary in order to support more than 32 > counters without a bunch of conditional code further complicating the > conversion. > > [...] Applied to will (for-next/perf), thanks! [01/12] perf: arm_pmuv3: Avoid assigning fixed cycle counter with threshold https://git.kernel.org/will/c/81e15ca3e523 [02/12] perf: arm_pmuv3: Drop unnecessary IS_ENABLED(CONFIG_ARM64) check https://git.kernel.org/will/c/598c1a2d9f4b [03/12] perf/arm: Move 32-bit PMU drivers to drivers/perf/ https://git.kernel.org/will/c/8d75537bebfa [04/12] perf: arm_v6/7_pmu: Drop non-DT probe support https://git.kernel.org/will/c/12f051c987dc [05/12] perf: arm_pmuv3: Include asm/arm_pmuv3.h from linux/perf/arm_pmuv3.h https://git.kernel.org/will/c/d688ffa26942 [06/12] perf: arm_pmu: Remove event index to counter remapping https://git.kernel.org/will/c/b7e89b0f5bd7 [07/12] perf: arm_pmuv3: Prepare for more than 32 counters https://git.kernel.org/will/c/12fef9fb7179 [08/12] KVM: arm64: pmu: Use arm_pmuv3.h register accessors https://git.kernel.org/will/c/6ef2846c17a3 [09/12] KVM: arm64: pmu: Use generated define for PMSELR_EL0.SEL access https://git.kernel.org/will/c/558fdd12c069 [10/12] arm64: perf/kvm: Use a common PMU cycle counter define https://git.kernel.org/will/c/323bc9e17c01 [11/12] KVM: arm64: Refine PMU defines for number of counters https://git.kernel.org/will/c/be884dd62461 [12/12] perf: arm_pmuv3: Add support for Armv9.4 PMU instruction counter https://git.kernel.org/will/c/dc4c33f753ca Cheers,
On Wed, Jul 03, 2024 at 03:38:44PM +0100, Will Deacon wrote: > On Wed, 26 Jun 2024 16:32:24 -0600, Rob Herring (Arm) wrote: > > This series adds support for the optional fixed instruction counter > > added in Armv9.4 PMU. Most of the series is a refactoring to remove the > > index to counter number conversion which dates back to the Armv7 PMU > > driver. Removing it is necessary in order to support more than 32 > > counters without a bunch of conditional code further complicating the > > conversion. > > > > [...] > > Applied to will (for-next/perf), thanks! > > [01/12] perf: arm_pmuv3: Avoid assigning fixed cycle counter with threshold > https://git.kernel.org/will/c/81e15ca3e523 > [02/12] perf: arm_pmuv3: Drop unnecessary IS_ENABLED(CONFIG_ARM64) check > https://git.kernel.org/will/c/598c1a2d9f4b > [03/12] perf/arm: Move 32-bit PMU drivers to drivers/perf/ > https://git.kernel.org/will/c/8d75537bebfa > [04/12] perf: arm_v6/7_pmu: Drop non-DT probe support > https://git.kernel.org/will/c/12f051c987dc > [05/12] perf: arm_pmuv3: Include asm/arm_pmuv3.h from linux/perf/arm_pmuv3.h > https://git.kernel.org/will/c/d688ffa26942 I've had an off-list report that this series causes a kernel crash under KVM unit tests (panic in write_pmevtypern()). Given that I don't have enough information to repro/debug and Catalin is tagging the arm64 branch for 6.11 today, I've dropped patches 6-12 for now. Please can you send a fixed version after the merge window? Cheers, Will
This series adds support for the optional fixed instruction counter added in Armv9.4 PMU. Most of the series is a refactoring to remove the index to counter number conversion which dates back to the Armv7 PMU driver. Removing it is necessary in order to support more than 32 counters without a bunch of conditional code further complicating the conversion. Patches 1-2 are a fix and cleanup for the threshold support. Patch 1 is a dependency of patch 12. Patches 3-4 move the 32-bit Arm PMU drivers into drivers/perf/ and drop non-DT probe support. These can be taken first if there's no comments on them. Patch 5 is new to v2 and implements the common pattern of the linux/ header including the asm/ header of the same name. Patch 6 changes struct arm_pmu.num_events to a bitmap of events, and updates all the users. This removes the index to counter conversion on the PMUv3 and Armv7 drivers. Patch 7 updates various register accessors to use 64-bit values matching the register size. Patches 8-9 update KVM PMU register accesses to use shared accessors from asm/arm_pmuv3.h. Patches 10-11 rework KVM and perf PMU defines for counter indexes and number of counters. Patch 12 finally adds support for the fixed instruction counter. I tested this on FVP with VHE host and a guest. I tested the Armv7 PMU changes with QEMU. Signed-off-by: Rob Herring (Arm) <robh@kernel.org> --- Changes in v2: - Include threshold fix patches and account for threshold support in counter assignment. - Add patch including asm/arm_pmuv3.h from linux/perf/arm_pmuv3.h - Fix compile error for Apple PMU - Minor review comments detailed in individual patches - Link to v1: https://lore.kernel.org/r/20240607-arm-pmu-3-9-icntr-v1-0-c7bd2dceff3b@kernel.org --- Rob Herring (Arm) (12): perf: arm_pmuv3: Avoid assigning fixed cycle counter with threshold perf: arm_pmuv3: Drop unnecessary IS_ENABLED(CONFIG_ARM64) check perf/arm: Move 32-bit PMU drivers to drivers/perf/ perf: arm_v6/7_pmu: Drop non-DT probe support perf: arm_pmuv3: Include asm/arm_pmuv3.h from linux/perf/arm_pmuv3.h perf: arm_pmu: Remove event index to counter remapping perf: arm_pmuv3: Prepare for more than 32 counters KVM: arm64: pmu: Use arm_pmuv3.h register accessors KVM: arm64: pmu: Use generated define for PMSELR_EL0.SEL access arm64: perf/kvm: Use a common PMU cycle counter define KVM: arm64: Refine PMU defines for number of counters perf: arm_pmuv3: Add support for Armv9.4 PMU instruction counter arch/arm/include/asm/arm_pmuv3.h | 20 +++ arch/arm/kernel/Makefile | 2 - arch/arm64/include/asm/arm_pmuv3.h | 55 +++++++- arch/arm64/include/asm/kvm_host.h | 8 +- arch/arm64/include/asm/sysreg.h | 1 - arch/arm64/kvm/pmu-emul.c | 15 +- arch/arm64/kvm/pmu.c | 87 +++--------- arch/arm64/kvm/sys_regs.c | 11 +- arch/arm64/tools/sysreg | 30 ++++ drivers/perf/Kconfig | 12 ++ drivers/perf/Makefile | 3 + drivers/perf/apple_m1_cpu_pmu.c | 4 +- drivers/perf/arm_pmu.c | 11 +- drivers/perf/arm_pmuv3.c | 154 +++++++++++---------- .../perf_event_v6.c => drivers/perf/arm_v6_pmu.c | 26 +--- .../perf_event_v7.c => drivers/perf/arm_v7_pmu.c | 90 ++++-------- .../perf/arm_xscale_pmu.c | 15 +- include/kvm/arm_pmu.h | 8 +- include/linux/perf/arm_pmu.h | 10 +- include/linux/perf/arm_pmuv3.h | 11 +- 20 files changed, 301 insertions(+), 272 deletions(-) --- base-commit: 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0 change-id: 20240607-arm-pmu-3-9-icntr-04375ddd0082 Best regards,