[PATCH v3 0/5] arm64: Enable access to pmu registers by user-space

From: Raphael Gault
Date: Fri Aug 16 2019 - 08:59:47 EST


Changes since v2:
* Rebased on linux-next/master again (next-20190814)
* Use linux/compiler.h header as suggested by Arnaldo

The perf user-space tool relies on the PMU to monitor events. It offers an
abstraction layer over the hardware counters since the underlying
implementation is cpu-dependent. We want to allow userspace tools to have
access to the registers storing the hardware counters' values directly.
This targets specifically self-monitoring tasks in order to reduce the
overhead by directly accessing the registers without having to go
through the kernel.
In order to do this we need to setup the pmu so that it exposes its registers
to userspace access.

The first patch add a test to the perf tool so that we can test that the
access to the registers works correctly from userspace.

The second patch add a capability in the arm64 cpufeatures framework in
order to detect when we are running on a heterogeneous system.

The third patch focuses on the armv8 pmuv3 PMU support and makes sure that
the access to the pmu registers is enable and that the userspace have
access to the relevent information in order to use them.

The fourth patch put in place callbacks to enable access to the hardware
counters from userspace when a compatible event is opened using the perf

The fifth patch adds a short documentation about PMU counters direct
access from userspace.

Raphael Gault (5):
perf: arm64: Add test to check userspace access to hardware counters.
arm64: cpufeature: Add feature to detect heterogeneous systems
arm64: pmu: Add function implementation to update event index in
arm64: perf: Enable pmu counter direct access for perf event on armv8
Documentation: arm64: Document PMU counters access from userspace

.../arm64/pmu_counter_user_access.txt | 42 +++
arch/arm64/include/asm/cpucaps.h | 3 +-
arch/arm64/include/asm/mmu.h | 6 +
arch/arm64/include/asm/mmu_context.h | 2 +
arch/arm64/include/asm/perf_event.h | 14 +
arch/arm64/kernel/cpufeature.c | 20 ++
arch/arm64/kernel/perf_event.c | 23 ++
drivers/perf/arm_pmu.c | 38 +++
include/linux/perf/arm_pmu.h | 2 +
tools/perf/arch/arm64/include/arch-tests.h | 7 +
tools/perf/arch/arm64/tests/Build | 1 +
tools/perf/arch/arm64/tests/arch-tests.c | 4 +
tools/perf/arch/arm64/tests/user-events.c | 254 ++++++++++++++++++
13 files changed, 415 insertions(+), 1 deletion(-)
create mode 100644 Documentation/arm64/pmu_counter_user_access.txt
create mode 100644 tools/perf/arch/arm64/tests/user-events.c