linux-xiaomi-chiron/arch
Rob Herring 83a7a4d643 arm64: perf: Enable PMU counter userspace access for perf event
Arm PMUs can support direct userspace access of counters which allows for
low overhead (i.e. no syscall) self-monitoring of tasks. The same feature
exists on x86 called 'rdpmc'. Unlike x86, userspace access will only be
enabled for thread bound events. This could be extended if needed, but
simplifies the implementation and reduces the chances for any
information leaks (which the x86 implementation suffers from).

PMU EL0 access will be enabled when an event with userspace access is
part of the thread's context. This includes when the event is not
scheduled on the PMU. There's some additional overhead clearing
dirty counters when access is enabled in order to prevent leaking
disabled counter data from other tasks.

Unlike x86, enabling of userspace access must be requested with a new
attr bit: config1:1. If the user requests userspace access with 64-bit
counters, then the event open will fail if the h/w doesn't support
64-bit counters. Chaining is not supported with userspace access. The
modes for config1 are as follows:

config1 = 0 : user access disabled and always 32-bit
config1 = 1 : user access disabled and always 64-bit (using chaining if needed)
config1 = 2 : user access enabled and always 32-bit
config1 = 3 : user access enabled and always 64-bit

Based on work by Raphael Gault <raphael.gault@arm.com>, but has been
completely re-written.

Cc: Will Deacon <will@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-perf-users@vger.kernel.org
Signed-off-by: Rob Herring <robh@kernel.org>
Link: https://lore.kernel.org/r/20211208201124.310740-5-robh@kernel.org
[will: Made armv8pmu_proc_user_access_handler() static]
Signed-off-by: Will Deacon <will@kernel.org>
2021-12-14 11:40:59 +00:00
..
alpha futex: Wireup futex_waitv syscall 2021-11-25 14:26:12 +01:00
arc Add linux/cacheflush.h 2021-11-17 10:36:15 -05:00
arm ARM: SoC fixes for v5.16, part 2 2021-11-25 10:31:37 -08:00
arm64 arm64: perf: Enable PMU counter userspace access for perf event 2021-12-14 11:40:59 +00:00
csky asm-generic: asm/syscall.h cleanup 2021-11-10 11:22:03 -08:00
h8300 Kbuild updates for v5.16 2021-11-08 09:15:45 -08:00
hexagon hexagon: ignore vmlinux.lds 2021-11-20 10:35:54 -08:00
ia64 futex: Wireup futex_waitv syscall 2021-11-25 14:26:12 +01:00
m68k asm-generic: syscall table updates 2021-11-25 10:41:28 -08:00
microblaze futex: Wireup futex_waitv syscall 2021-11-25 14:26:12 +01:00
mips - build fix for ZSTD enabled configs 2021-11-27 09:50:31 -08:00
nds32 Add linux/cacheflush.h 2021-11-17 10:36:15 -05:00
nios2 Add linux/cacheflush.h 2021-11-17 10:36:15 -05:00
openrisc Merge branch 'exit-cleanups-for-v5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2021-11-10 16:15:54 -08:00
parisc Fixes for 5.16 folios: 2021-11-25 10:13:56 -08:00
powerpc powerpc fixes for 5.16 #3 2021-11-27 10:06:15 -08:00
riscv RISC-V Fixes for 5.16-rc2 2021-11-19 11:40:14 -08:00
s390 s390 updates for 5.16-rc2 2021-11-20 10:55:50 -08:00
sh asm-generic: syscall table updates 2021-11-25 10:41:28 -08:00
sparc asm-generic: syscall table updates 2021-11-25 10:41:28 -08:00
um Merge branch 'exit-cleanups-for-v5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2021-11-10 16:15:54 -08:00
x86 x86: perf: Move RDPMC event flag to a common definition 2021-12-14 11:30:54 +00:00
xtensa asm-generic: syscall table updates 2021-11-25 10:41:28 -08:00
.gitignore .gitignore: prefix local generated files with a slash 2021-05-02 00:43:35 +09:00
Kconfig arch: Add generic Kconfig option indicating page size smaller than 64k 2021-11-27 14:34:41 -08:00