• Rob Herring's avatar
    arm64: perf: Enable PMU counter userspace access for perf event · 83a7a4d6
    Rob Herring authored
    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: default avatarRob 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: default avatarWill Deacon <will@kernel.org>
    83a7a4d6
perf_event.c 43.7 KB