arm64: perf: heterogeneous PMU support
Subsystems (8)
Mark Rutland
maintainerv3 cover arm64: perf: heterogeneous PMU support
This patch series reworks the 32-bit ARM perf code into a library, and migrates the arm64 perf code over to it, gaining support for heterogeneous PMUs. Support is then added for Cortex-A53 and Cortex-A57 as used in Juno systems.
Previously the librification [1] and arm64 migration [2] were separate series, but as the bulk of the librification made it for v4.2-rc1 the remaining work is mostly trivial.
With this series applied, perf can be used to monitor 64-bit systems with heterogeneous PMUs in an identical fashion to 32-bit systems, e.g.
$ perf stat -e armv8_cortex_a53/config=0x11/ -e armv8_cortex_a57/config=0x11/ ./a.out
Performance counter stats for './a.out':
185250238 armv8_cortex_a53/config=0x11/ [55.34%]
225006550 armv8_cortex_a57/config=0x11/ [43.96%]
0.213953840 seconds time elapsed$ perf stat -e cycles ./a.out
Performance counter stats for './a.out':
830917902 cycles [64.60%]
1.023141420 seconds time elapsedSince v2 [3]:
* Rebase to v4.2-rc1
* Split MAINTAINERS changes
* Add arm64 perf code to MAINTAINERS entry
Thanks,
Mark.
[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-May/346538.html
[2] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-May/346555.html
[3] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-June/350109.html
Mark Rutland (9):
arm: perf: factor arm_pmu core out to drivers
arm64: perf: factor out callchain code
arm64: perf: move to shared arm_pmu framework
arm64: perf: condense event number maps
arm64: perf: add Cortex-A53 support
arm64: perf: add Cortex-A57 support
arm64: dts: juno: describe PMUs separately
MAINTAINERS: update ARM PMU profiling and debugging for arm64
MAINTAINERS: add myself as arm perf reviewer
Documentation/devicetree/bindings/arm/pmu.txt | 2 + MAINTAINERS | 11 +- arch/arm/Kconfig | 8 +- arch/arm/kernel/Makefile | 3 +- arch/arm/kernel/perf_event_v6.c | 2 +- arch/arm/kernel/perf_event_v7.c | 2 +- arch/arm/kernel/perf_event_xscale.c | 2 +- arch/arm/mach-ux500/cpu-db8500.c | 2 +- arch/arm64/Kconfig | 8 +- arch/arm64/boot/dts/arm/juno-r1.dts | 18 +- arch/arm64/boot/dts/arm/juno.dts | 18 +- arch/arm64/include/asm/perf_event.h | 2 +- arch/arm64/include/asm/pmu.h | 83 - arch/arm64/kernel/Makefile | 4 +- arch/arm64/kernel/perf_callchain.c | 196 +++ arch/arm64/kernel/perf_event.c | 1594 -------------------- arch/arm64/kernel/perf_event_pmuv3.c | 684 +++++++++ drivers/Kconfig | 2 + drivers/Makefile | 1 + drivers/perf/Kconfig | 14 + drivers/perf/Makefile | 1 + .../kernel/perf_event.c => drivers/perf/arm_pmu.c | 2 +- .../asm/pmu.h => include/linux/perf/arm_pmu.h | 4 +- 23 files changed, 944 insertions(+), 1719 deletions(-) delete mode 100644 arch/arm64/include/asm/pmu.h create mode 100644 arch/arm64/kernel/perf_callchain.c delete mode 100644 arch/arm64/kernel/perf_event.c create mode 100644 arch/arm64/kernel/perf_event_pmuv3.c create mode 100644 drivers/perf/Kconfig create mode 100644 drivers/perf/Makefile rename arch/arm/kernel/perf_event.c => drivers/perf/arm_pmu.c (99%) rename arch/arm/include/asm/pmu.h => include/linux/perf/arm_pmu.h (98%)
Signature · 1 line
1.9.1
Mark Rutland
maintainerPATCH v3 1/9 arm: perf: factor arm_pmu core out to drivers
To enable sharing of the arm_pmu code with arm64, this patch factors it out to drivers/perf/. A new drivers/perf directory is added for performance monitor drivers to live under.
MAINTAINERS is updated accordingly. Files added previously without a corresponsing MAINTAINERS update (perf_regs.c, perf_callchain.c, and perf_event.h) are also added.
--- MAINTAINERS | 6 ++++-- arch/arm/Kconfig | 8 ++------ arch/arm/kernel/Makefile | 3 +-- arch/arm/kernel/perf_event_v6.c | 2 +- arch/arm/kernel/perf_event_v7.c | 2 +- arch/arm/kernel/perf_event_xscale.c | 2 +- arch/arm/mach-ux500/cpu-db8500.c | 2 +- drivers/Kconfig | 2 ++ drivers/Makefile | 1 + drivers/perf/Kconfig | 14 ++++++++++++++ drivers/perf/Makefile | 1 + arch/arm/kernel/perf_event.c => drivers/perf/arm_pmu.c | 2 +- arch/arm/include/asm/pmu.h => include/linux/perf/arm_pmu.h | 4 ++-- 13 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 drivers/perf/Kconfig create mode 100644 drivers/perf/Makefile rename arch/arm/kernel/perf_event.c => drivers/perf/arm_pmu.c (99%) rename arch/arm/include/asm/pmu.h => include/linux/perf/arm_pmu.h (98%)
MAINTAINERS +4 -2
@@ -799,11 +799,13 @@ F: arch/arm/include/asm/floppy.h ARM PMU PROFILING AND DEBUGGING M: Will Deacon <[email protected]> S: Maintained -F: arch/arm/kernel/perf_event* +F: arch/arm/kernel/perf_* F: arch/arm/oprofile/common.c -F: arch/arm/include/asm/pmu.h F: arch/arm/kernel/hw_breakpoint.c F: arch/arm/include/asm/hw_breakpoint.h +F: arch/arm/include/asm/perf_event.h +F: drivers/perf/arm_pmu.c +F: include/linux/perf/arm_pmu.h ARM PORT M: Russell King <[email protected]>
arch/arm/Kconfig +2 -6
@@ -1695,12 +1695,8 @@ config HIGHPTE depends on HIGHMEM config HW_PERF_EVENTS - bool "Enable hardware performance counter support for perf events" - depends on PERF_EVENTS - default y - help - Enable hardware performance counter support for perf events. If - disabled, perf events will use software events only. + def_bool y + depends on ARM_PMU config SYS_SUPPORTS_HUGETLBFS def_bool y
arch/arm/kernel/Makefile +1 -2
@@ -71,8 +71,7 @@ obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o obj-$(CONFIG_CPU_PJ4B) += pj4-cp0.o obj-$(CONFIG_IWMMXT) += iwmmxt.o obj-$(CONFIG_PERF_EVENTS) += perf_regs.o perf_callchain.o -obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o \ - perf_event_xscale.o perf_event_v6.o \ +obj-$(CONFIG_HW_PERF_EVENTS) += perf_event_xscale.o perf_event_v6.o \ perf_event_v7.o CFLAGS_pj4-cp0.o := -marm AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
arch/arm/kernel/perf_event_v6.c +1 -1
@@ -34,9 +34,9 @@#include <asm/cputype.h> #include <asm/irq_regs.h> -#include <asm/pmu.h> #include <linux/of.h> +#include <linux/perf/arm_pmu.h> #include <linux/platform_device.h> enum armv6_perf_types {
arch/arm/kernel/perf_event_v7.c +1 -1
@@ -21,11 +21,11 @@#include <asm/cp15.h> #include <asm/cputype.h> #include <asm/irq_regs.h> -#include <asm/pmu.h> #include <asm/vfp.h> #include "../vfp/vfpinstr.h" #include <linux/of.h> +#include <linux/perf/arm_pmu.h> #include <linux/platform_device.h> /*
arch/arm/kernel/perf_event_xscale.c +1 -1
@@ -16,9 +16,9 @@#include <asm/cputype.h> #include <asm/irq_regs.h> -#include <asm/pmu.h> #include <linux/of.h> +#include <linux/perf/arm_pmu.h> #include <linux/platform_device.h> enum xscale_perf_types {
arch/arm/mach-ux500/cpu-db8500.c +1 -1
@@ -20,10 +20,10 @@#include <linux/mfd/dbx500-prcmu.h> #include <linux/of.h> #include <linux/of_platform.h> +#include <linux/perf/arm_pmu.h> #include <linux/regulator/machine.h> #include <linux/random.h> -#include <asm/pmu.h> #include <asm/mach/map.h> #include "setup.h"
drivers/Kconfig +2 -0
@@ -176,6 +176,8 @@ source "drivers/powercap/Kconfig" source "drivers/mcb/Kconfig" +source "drivers/perf/Kconfig" + source "drivers/ras/Kconfig" source "drivers/thunderbolt/Kconfig"
drivers/Makefile +1 -0
@@ -161,6 +161,7 @@ obj-$(CONFIG_NTB) += ntb/ obj-$(CONFIG_FMC) += fmc/ obj-$(CONFIG_POWERCAP) += powercap/ obj-$(CONFIG_MCB) += mcb/ +obj-$(CONFIG_PERF_EVENTS) += perf/ obj-$(CONFIG_RAS) += ras/ obj-$(CONFIG_THUNDERBOLT) += thunderbolt/ obj-$(CONFIG_CORESIGHT) += hwtracing/coresight/
drivers/perf/Kconfig new file +14 -0
@@ -0,0 +1,14 @@ +# +# Performance Monitor Drivers +# + +menu "Performance monitor support" + +config ARM_PMU + depends on PERF_EVENTS && ARM + bool "ARM PMU framework" + default y + help + Say y if you want to use performance monitors on ARM systems. + +endmenu
drivers/perf/Makefile new file +1 -0
@@ -0,0 +1 @@ +obj-$(CONFIG_ARM_PMU) += arm_pmu.o
drivers/perf/arm_pmu.c renamed from arch/arm/kernel/perf_event.c +1 -1
@@ -16,6 +16,7 @@#include <linux/export.h> #include <linux/kernel.h> #include <linux/of.h> +#include <linux/perf/arm_pmu.h> #include <linux/platform_device.h> #include <linux/slab.h> #include <linux/spinlock.h>
@@ -24,7 +25,6 @@#include <asm/cputype.h> #include <asm/irq_regs.h> -#include <asm/pmu.h> static int armpmu_map_cache_event(const unsigned (*cache_map)
include/linux/perf/arm_pmu.h renamed from arch/arm/include/asm/pmu.h +2 -2
@@ -30,7 +30,7 @@ struct arm_pmu_platdata { irq_handler_t pmu_handler); }; -#ifdef CONFIG_HW_PERF_EVENTS +#ifdef CONFIG_ARM_PMU /* * The ARMv7 CPU PMU supports up to 32 event counters.
@@ -149,6 +149,6 @@ int arm_pmu_device_probe(struct platform_device *pdev,const struct of_device_id *of_table, const struct pmu_probe_info *probe_table); -#endif /* CONFIG_HW_PERF_EVENTS */ +#endif /* CONFIG_ARM_PMU */ #endif /* __ARM_PMU_H__ */
Signature · 1 line
1.9.1
PATCH v3 1/9 arm: perf: factor arm_pmu core out to drivers
Hi Mark,
Quoted 28 lines · Mark Rutland
To enable sharing of the
arm_pmucode with arm64, this patch factors it out todrivers/perf/. A newdrivers/perfdirectory is added for performance monitor drivers to live under.
MAINTAINERSis updated accordingly. Files added previously without a corresponsingMAINTAINERSupdate (perf_regs.c,perf_callchain.c, andperf_event.h) are also added.Signed-off-by Mark Rutland <[email protected]>Cc Arnaldo Carvalho de Melo <[email protected]>Cc Greg Kroah-Hartman <[email protected]>Cc Ingo Molnar <[email protected]>Cc Linus Walleij <[email protected]>Cc Paul Mackerras <[email protected]>Cc Peter Zijlstra <[email protected]>Cc Russell King <[email protected]>Cc Will Deacon <[email protected]>--- MAINTAINERS | 6 ++++-- arch/arm/Kconfig | 8 ++------ arch/arm/kernel/Makefile | 3 +-- arch/arm/kernel/perf_event_v6.c | 2 +- arch/arm/kernel/perf_event_v7.c | 2 +- arch/arm/kernel/perf_event_xscale.c | 2 +- arch/arm/mach-ux500/cpu-db8500.c | 2 +- drivers/Kconfig | 2 ++ drivers/Makefile | 1 + drivers/perf/Kconfig | 14 ++++++++++++++
Quoted 8 lines
drivers/perf/Makefile | 1 + arch/arm/kernel/perf_event.c => drivers/perf/arm_pmu.c | 2 +- arch/arm/include/asm/pmu.h => include/linux/perf/arm_pmu.h | 4 ++-- 13 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 drivers/perf/Kconfig create mode 100644 drivers/perf/Makefile rename arch/arm/kernel/perf_event.c => drivers/perf/arm_pmu.c (99%) rename arch/arm/include/asm/pmu.h => include/linux/perf/arm_pmu.h (98%)
I'd like to take this for 4.3 on top of my current queue of ARM perf updates. I've put together a branch, but it's not clear which tree this should go through.
Russell: would you be ok taking this via the ARM tree, or would you prefer it if I sent this via arm-soc? Personally, I think it makes sense to send it to you along with the usual updates, but I appreciate you don't normally touch drivers/ directly like this.
Will
Mark Rutland
maintainerPATCH v3 2/9 arm64: perf: factor out callchain code
In reply to Mark RutlandWe currently bundle the callchain handling code with the PMU code, despite the fact the two are distinct, and the former can be useful even in the absence of the latter.
Follow the example of arch/arm and factor the callchain handling into its own file dependent on CONFIG_PERF_EVENTS rather than CONFIG_HW_PERF_EVENTS.
--- arch/arm64/include/asm/perf_event.h | 2 +- arch/arm64/kernel/Makefile | 2 +- arch/arm64/kernel/perf_callchain.c | 196 ++++++++++++++++++++++++++++++++++++ arch/arm64/kernel/perf_event.c | 178 -------------------------------- 4 files changed, 198 insertions(+), 180 deletions(-) create mode 100644 arch/arm64/kernel/perf_callchain.c
arch/arm64/include/asm/perf_event.h +1 -1
@@ -17,7 +17,7 @@#ifndef __ASM_PERF_EVENT_H#define __ASM_PERF_EVENT_H -#ifdef CONFIG_HW_PERF_EVENTS +#ifdef CONFIG_PERF_EVENTS struct pt_regs ;extern unsigned long perf_instruction_pointer (struct pt_regs *regs);extern unsigned long perf_misc_flags (struct pt_regs *regs);
arch/arm64/kernel/Makefile +1 -1
@@ -25,7 +25,7 @@ arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \ arm64-obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o entry-ftrace.o arm64-obj-$(CONFIG_MODULES) += arm64ksyms.o module.o arm64-obj-$(CONFIG_SMP) += smp.o smp_spin_table.o topology.o -arm64-obj-$(CONFIG_PERF_EVENTS) += perf_regs.o +arm64-obj-$(CONFIG_PERF_EVENTS) += perf_regs.o perf_callchain.o arm64-obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o arm64-obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o arm64-obj-$(CONFIG_CPU_PM) += sleep.o suspend.o
arch/arm64/kernel/perf_callchain.c new file +196 -0
196 lines not on this page · raw message
arch/arm64/kernel/perf_event.c +0 -178
187 lines not on this page · raw message
Signature · 1 line
1.9.1
Mark Rutland
maintainerPATCH v3 3/9 arm64: perf: move to shared arm_pmu framework
In reply to Mark RutlandNow that the arm_pmu framework has been factored out to drivers/perf we can make use of it for arm64, gaining support for heterogeneous PMUs and unifying the two codebases before they diverge further.
The as yet unused PMU name for PMUv3 is changed to armv8_pmuv3, matching the style previously applied to the 32-bit PMUs.
--- arch/arm64/Kconfig | 8 +- arch/arm64/include/asm/pmu.h | 83 -- arch/arm64/kernel/Makefile | 2 +- arch/arm64/kernel/perf_event.c | 1416 ---------------------------------- arch/arm64/kernel/perf_event_pmuv3.c | 653 ++++++++++++++++ drivers/perf/Kconfig | 2 +- 6 files changed, 657 insertions(+), 1507 deletions(-) delete mode 100644 arch/arm64/include/asm/pmu.h delete mode 100644 arch/arm64/kernel/perf_event.c create mode 100644 arch/arm64/kernel/perf_event_pmuv3.c
arch/arm64/Kconfig +2 -6
@@ -544,12 +544,8 @@ config HAVE_ARCH_PFN_VALID def_bool ARCH_HAS_HOLES_MEMORYMODEL || !SPARSEMEM config HW_PERF_EVENTS - bool "Enable hardware performance counter support for perf events" - depends on PERF_EVENTS - default y - help - Enable hardware performance counter support for perf events. If - disabled, perf events will use software events only. + def_bool y + depends on ARM_PMU config SYS_SUPPORTS_HUGETLBFS def_bool y
arch/arm64/include/asm/pmu.h deleted +0 -83
83 lines not on this page · raw message
arch/arm64/kernel/Makefile +1 -1
@@ -26,7 +26,7 @@ arm64-obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o entry-ftrace.o arm64-obj-$(CONFIG_MODULES) += arm64ksyms.o module.o arm64-obj-$(CONFIG_SMP) += smp.o smp_spin_table.o topology.o arm64-obj-$(CONFIG_PERF_EVENTS) += perf_regs.o perf_callchain.o -arm64-obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o +arm64-obj-$(CONFIG_HW_PERF_EVENTS) += perf_event_pmuv3.o arm64-obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o arm64-obj-$(CONFIG_CPU_PM) += sleep.o suspend.o arm64-obj-$(CONFIG_CPU_IDLE) += cpuidle.o
arch/arm64/kernel/perf_event.c deleted +0 -1416
1,416 lines not on this page · raw message
arch/arm64/kernel/perf_event_pmuv3.c new file +653 -0
653 lines not on this page · raw message
drivers/perf/Kconfig +1 -1
@@ -5,7 +5,7 @@ menu "Performance monitor support" config ARM_PMU - depends on PERF_EVENTS && ARM + depends on PERF_EVENTS && (ARM || ARM64) bool "ARM PMU framework" default y help
Signature · 1 line
1.9.1
Mark Rutland
maintainerPATCH v3 4/9 arm64: perf: condense event number maps
In reply to Mark RutlandMost of the cache events an architecture might support do not map well to those provided by the ARM architecture, and as such most entries in the event number maps are *_UNSUPPORTED. Unfortuantely as 0 is a valid physical event identifier, the *_UNSUPPORTED macros expand to a non-zero value and thus each unsupported event must be explicitly intiailised as such. This leads to large diffs when adding support for a new CPU, and makes it difficult to spot the important information.
This patch makes use of the new PERF_*_ALL_UNSUPORTED macros to intiailise all entries to *_UNSUPPORTED before overriding this for the specific events we actually support, resulting in a significant source code reduction.
--- arch/arm64/kernel/perf_event_pmuv3.c | 114 ++++------------------------------- 1 file changed, 12 insertions(+), 102 deletions(-)
arch/arm64/kernel/perf_event_pmuv3.c +12 -102
@@ -71,118 +71,28 @@ enum armv8_pmuv3_perf_types {/* PMUv3 HW events mapping. */ static const unsigned armv8_pmuv3_perf_map[PERF_COUNT_HW_MAX ] = { +PERF_MAP_ALL_UNSUPPORTED , [PERF_COUNT_HW_CPU_CYCLES ] =ARMV8_PMUV3_PERFCTR_CLOCK_CYCLES , [PERF_COUNT_HW_INSTRUCTIONS ] =ARMV8_PMUV3_PERFCTR_INSTR_EXECUTED , [PERF_COUNT_HW_CACHE_REFERENCES ] =ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS , [PERF_COUNT_HW_CACHE_MISSES ] =ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL , - [PERF_COUNT_HW_BRANCH_INSTRUCTIONS ] =HW_OP_UNSUPPORTED , [PERF_COUNT_HW_BRANCH_MISSES ] =ARMV8_PMUV3_PERFCTR_PC_BRANCH_MIS_PRED , - [PERF_COUNT_HW_BUS_CYCLES ] =HW_OP_UNSUPPORTED , - [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND ] =HW_OP_UNSUPPORTED , - [PERF_COUNT_HW_STALLED_CYCLES_BACKEND ] =HW_OP_UNSUPPORTED , };static const unsigned armv8_pmuv3_perf_cache_map[PERF_COUNT_HW_CACHE_MAX ] [PERF_COUNT_HW_CACHE_OP_MAX ] [PERF_COUNT_HW_CACHE_RESULT_MAX ] = { - [C (L1D )] = { - [C (OP_READ )] = { - [C (RESULT_ACCESS )] =ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS , - [C (RESULT_MISS )] =ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL , - }, - [C (OP_WRITE )] = { - [C (RESULT_ACCESS )] =ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS , - [C (RESULT_MISS )] =ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL , - }, - [C (OP_PREFETCH )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - }, - [C (L1I )] = { - [C (OP_READ )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - [C (OP_WRITE )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - [C (OP_PREFETCH )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - }, - [C (LL )] = { - [C (OP_READ )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - [C (OP_WRITE )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - [C (OP_PREFETCH )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - }, - [C (DTLB )] = { - [C (OP_READ )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - [C (OP_WRITE )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - [C (OP_PREFETCH )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - }, - [C (ITLB )] = { - [C (OP_READ )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - [C (OP_WRITE )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - [C (OP_PREFETCH )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - }, - [C (BPU )] = { - [C (OP_READ )] = { - [C (RESULT_ACCESS )] =ARMV8_PMUV3_PERFCTR_PC_BRANCH_PRED , - [C (RESULT_MISS )] =ARMV8_PMUV3_PERFCTR_PC_BRANCH_MIS_PRED , - }, - [C (OP_WRITE )] = { - [C (RESULT_ACCESS )] =ARMV8_PMUV3_PERFCTR_PC_BRANCH_PRED , - [C (RESULT_MISS )] =ARMV8_PMUV3_PERFCTR_PC_BRANCH_MIS_PRED , - }, - [C (OP_PREFETCH )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - }, - [C (NODE )] = { - [C (OP_READ )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - [C (OP_WRITE )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - [C (OP_PREFETCH )] = { - [C (RESULT_ACCESS )] =CACHE_OP_UNSUPPORTED , - [C (RESULT_MISS )] =CACHE_OP_UNSUPPORTED , - }, - }, +PERF_CACHE_MAP_ALL_UNSUPPORTED , + + [C (L1D )][C (OP_READ )][C (RESULT_ACCESS )] =ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS , + [C (L1D )][C (OP_READ )][C (RESULT_MISS )] =ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL , + [C (L1D )][C (OP_WRITE )][C (RESULT_ACCESS )] =ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS , + [C (L1D )][C (OP_WRITE )][C (RESULT_MISS )] =ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL , + + [C (BPU )][C (OP_READ )][C (RESULT_ACCESS )] =ARMV8_PMUV3_PERFCTR_PC_BRANCH_PRED , + [C (BPU )][C (OP_READ )][C (RESULT_MISS )] =ARMV8_PMUV3_PERFCTR_PC_BRANCH_MIS_PRED , + [C (BPU )][C (OP_WRITE )][C (RESULT_ACCESS )] =ARMV8_PMUV3_PERFCTR_PC_BRANCH_PRED , + [C (BPU )][C (OP_WRITE )][C (RESULT_MISS )] =ARMV8_PMUV3_PERFCTR_PC_BRANCH_MIS_PRED , };/*
Signature · 1 line
1.9.1
Mark Rutland
maintainerPATCH v3 5/9 arm64: perf: add Cortex-A53 support
In reply to Mark RutlandThe Cortex-A53 PMU supports a few events outside of the required PMUv3 set that are rather useful.
This patch adds the event map data for said events.
--- Documentation/devicetree/bindings/arm/pmu.txt | 1 + arch/arm64/kernel/perf_event_pmuv3.c | 64 ++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-)
Documentation/devicetree/bindings/arm/pmu.txt +1 -0
@@ -8,6 +8,7 @@ Required properties: - compatible : should be one of "arm,armv8-pmuv3" + "arm.cortex-a53-pmu" "arm,cortex-a17-pmu" "arm,cortex-a15-pmu" "arm,cortex-a12-pmu"
arch/arm64/kernel/perf_event_pmuv3.c +62 -2
107 lines not on this page · raw message
Signature · 1 line
1.9.1
Mark Rutland
maintainerPATCH v3 6/9 arm64: perf: add Cortex-A57 support
In reply to Mark RutlandThe Cortex-A57 PMU supports a few events outside of the required PMUv3 set that are rather useful.
This patch adds the event map data for said events.
--- Documentation/devicetree/bindings/arm/pmu.txt | 1 + arch/arm64/kernel/perf_event_pmuv3.c | 61 +++++++++++++++++++++++++++ 2 files changed, 62 insertions(+)
Documentation/devicetree/bindings/arm/pmu.txt +1 -0
@@ -8,6 +8,7 @@ Required properties: - compatible : should be one of "arm,armv8-pmuv3" + "arm.cortex-a57-pmu" "arm.cortex-a53-pmu" "arm,cortex-a17-pmu" "arm,cortex-a15-pmu"
arch/arm64/kernel/perf_event_pmuv3.c +61 -0
94 lines not on this page · raw message
Signature · 1 line
1.9.1
Mark Rutland
maintainerPATCH v3 7/9 arm64: dts: juno: describe PMUs separately
In reply to Mark RutlandThe A57 and A53 PMUs in support different events, so describe them separately in the Juno dts files.
--- arch/arm64/boot/dts/arm/juno-r1.dts | 18 +++++++++++------- arch/arm64/boot/dts/arm/juno.dts | 18 +++++++++++------- 2 files changed, 22 insertions(+), 14 deletions(-)
arch/arm64/boot/dts/arm/juno-r1.dts +11 -7
@@ -91,17 +91,21 @@ }; }; - pmu { - compatible = "arm,armv8-pmuv3"; + pmu_a57 { + compatible = "arm,cortex-a57-pmu"; interrupts = <GIC_SPI 02 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 06 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 06 IRQ_TYPE_LEVEL_HIGH>; + interrupt-affinity = <&A57_0>, + <&A57_1>; + }; + + pmu_a53 { + compatible = "arm,cortex-a53-pmu"; + interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>; - interrupt-affinity = <&A57_0>, - <&A57_1>, - <&A53_0>, + interrupt-affinity = <&A53_0>, <&A53_1>, <&A53_2>, <&A53_3>;
arch/arm64/boot/dts/arm/juno.dts +11 -7
@@ -91,17 +91,21 @@ }; }; - pmu { - compatible = "arm,armv8-pmuv3"; + pmu_a57 { + compatible = "arm,cortex-a57-pmu"; interrupts = <GIC_SPI 02 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 06 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 06 IRQ_TYPE_LEVEL_HIGH>; + interrupt-affinity = <&A57_0>, + <&A57_1>; + }; + + pmu_a53 { + compatible = "arm,cortex-a53-pmu"; + interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>; - interrupt-affinity = <&A57_0>, - <&A57_1>, - <&A53_0>, + interrupt-affinity = <&A53_0>, <&A53_1>, <&A53_2>, <&A53_3>;
Signature · 1 line
1.9.1
Mark Rutland
maintainerPATCH v3 8/9 MAINTAINERS: update ARM PMU profiling and debugging for arm64
In reply to Mark RutlandWill Deacon maintains the profiling and debugging code under both arch/arm and arch/arm64. Update MAINTAINERS to reflect this, in preparation for adding myself as a reviewer of said code.
--- MAINTAINERS | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
MAINTAINERS +4 -4
@@ -799,11 +799,11 @@ F: arch/arm/include/asm/floppy.h ARM PMU PROFILING AND DEBUGGING M: Will Deacon <[email protected]> S: Maintained -F: arch/arm/kernel/perf_* +F: arch/arm*/kernel/perf_* F: arch/arm/oprofile/common.c -F: arch/arm/kernel/hw_breakpoint.c -F: arch/arm/include/asm/hw_breakpoint.h -F: arch/arm/include/asm/perf_event.h +F: arch/arm*/kernel/hw_breakpoint.c +F: arch/arm*/include/asm/hw_breakpoint.h +F: arch/arm*/include/asm/perf_event.h F: drivers/perf/arm_pmu.c F: include/linux/perf/arm_pmu.h
Signature · 1 line
1.9.1
Mark Rutland
maintainerPATCH v3 9/9 MAINTAINERS: add myself as arm perf reviewer
In reply to Mark RutlandAs suggested by Will Deacon, add myself as a reviewer of the ARM PMU profiling and debugging code.
--- MAINTAINERS | 1 + 1 file changed, 1 insertion(+)
MAINTAINERS +1 -0
@@ -798,6 +798,7 @@ F: arch/arm/include/asm/floppy.h ARM PMU PROFILING AND DEBUGGING M: Will Deacon <[email protected]> +R: Mark Rutland <[email protected]> S: Maintained F: arch/arm*/kernel/perf_* F: arch/arm/oprofile/common.c
Signature · 1 line
1.9.1