This series enables perf branch stack sampling support on arm64 via a v9.2 arch feature called Branch Record Buffer Extension (BRBE). Details on BRBE can be found in the Arm ARM[1] chapter D18. I've picked up this series from Anshuman. This version has been reworked quite a bit by Mark and myself. The bulk of those changes are in patch 11. Patches 1-7 are new clean-ups/prep which stand on their own. They were previously posted here[2]. Please pick them up if there's no issues with them. Patches 8-11 add BRBE support with the actual support in patch 11. [1] https://developer.arm.com/documentation/ddi0487/latest/ [2] https://lore.kernel.org/all/20250107-arm-pmu-cleanups-v1-v1-0-313951346a25@xxxxxxxxxx/ v19: - Drop saving of branch records when task scheduled out (Mark). Make sched_task() callback actually get called. Enabling requires a call to perf_sched_cb_inc(). So the saving of branch records never happened. - Got rid of added armpmu ops. All BRBE support is contained within pmuv3 code. - Fix freeze on overflow for VHE - The cycle counter doesn't freeze BRBE on overflow, so avoid assigning it when BRBE is enabled. - Drop all the Arm specific exception branches. Not a clear need for them. - Fix handling of branch 'cycles' reading. CC field is mantissa/exponent, not an integer. - Rework s/w filtering to better match h/w filtering - Reject events with disjoint event filter and branch filter or with exclude_host set - Dropped perf test patch which has been applied for 6.14 - Dropped patch "KVM: arm64: Explicitly handle BRBE traps as UNDEFINED" which has been applied for 6.14 v18: - https://lore.kernel.org/all/20240613061731.3109448-1-anshuman.khandual@xxxxxxx/ For v1-v17, see the above link. Not going to duplicate it all here... Signed-off-by: "Rob Herring (Arm)" <robh@xxxxxxxxxx> --- Anshuman Khandual (4): arm64/sysreg: Add BRBE registers and fields arm64: Handle BRBE booting requirements KVM: arm64: nvhe: Disable branch generation in nVHE guests perf: arm_pmuv3: Add support for the Branch Record Buffer Extension (BRBE) Mark Rutland (3): perf: arm_pmu: Don't disable counter in armpmu_add() perf: arm_pmuv3: Don't disable counter in armv8pmu_enable_event() perf: arm_pmu: Move PMUv3-specific data Rob Herring (Arm) (4): perf: arm_pmuv3: Call kvm_vcpu_pmu_resync_el0() before enabling counters perf: arm_v7_pmu: Drop obvious comments for enabling/disabling counters and interrupts perf: arm_v7_pmu: Don't disable counter in (armv7|krait_|scorpion_)pmu_enable_event() perf: apple_m1: Don't disable counter in m1_pmu_enable_event() Documentation/arch/arm64/booting.rst | 21 + arch/arm64/include/asm/el2_setup.h | 86 +++- arch/arm64/include/asm/kvm_host.h | 2 + arch/arm64/include/asm/sysreg.h | 17 +- arch/arm64/kvm/debug.c | 4 + arch/arm64/kvm/hyp/nvhe/debug-sr.c | 32 ++ arch/arm64/tools/sysreg | 132 ++++++ drivers/perf/Kconfig | 11 + drivers/perf/Makefile | 1 + drivers/perf/apple_m1_cpu_pmu.c | 4 - drivers/perf/arm_brbe.c | 794 +++++++++++++++++++++++++++++++++++ drivers/perf/arm_brbe.h | 47 +++ drivers/perf/arm_pmu.c | 23 +- drivers/perf/arm_pmuv3.c | 96 ++++- drivers/perf/arm_v7_pmu.c | 50 --- include/linux/perf/arm_pmu.h | 21 +- 16 files changed, 1250 insertions(+), 91 deletions(-) --- base-commit: 2014c95afecee3e76ca4a56956a936e23283f05b change-id: 20250129-arm-brbe-v19-24d5d9e5e623 Best regards, -- Rob Herring (Arm) <robh@xxxxxxxxxx>