[PATCH v19 00/11] arm64/perf: Enable branch stack sampling

From: Rob Herring (Arm)
Date: Sun Feb 02 2025 - 19:43:29 EST


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>