summaryrefslogtreecommitdiffstats
path: root/meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-add-support-for-perf-registers-API.diff
diff options
context:
space:
mode:
Diffstat (limited to 'meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-add-support-for-perf-registers-API.diff')
-rw-r--r--meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-add-support-for-perf-registers-API.diff128
1 files changed, 128 insertions, 0 deletions
diff --git a/meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-add-support-for-perf-registers-API.diff b/meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-add-support-for-perf-registers-API.diff
new file mode 100644
index 0000000..13b251a
--- /dev/null
+++ b/meta-beagleboard-extras/recipes/linux/linux-mainline/ARM-perf-add-support-for-perf-registers-API.diff
@@ -0,0 +1,128 @@
1From 8221f36672b7a1336c2bf245c394f0b5453784a1 Mon Sep 17 00:00:00 2001
2From: Will Deacon <will.deacon@arm.com>
3Date: Thu, 26 Sep 2013 12:36:35 +0100
4Subject: [PATCH] ARM: perf: add support for perf registers API
5
6This patch implements the functions required for the perf registers API,
7allowing the perf tool to interface kernel register dumps with libunwind
8in order to provide userspace backtracing.
9
10B2Qt: Backported for 3.8 kernel
11
12Cc: Jean Pihet <jean.pihet@linaro.org>
13Signed-off-by: Will Deacon <will.deacon@arm.com>
14---
15 arch/arm/Kconfig | 2 ++
16 arch/arm/include/uapi/asm/Kbuild | 1 +
17 arch/arm/include/uapi/asm/perf_regs.h | 23 +++++++++++++++++++++++
18 arch/arm/kernel/Makefile | 1 +
19 arch/arm/kernel/perf_regs.c | 30 ++++++++++++++++++++++++++++++
20 5 files changed, 57 insertions(+)
21 create mode 100644 arch/arm/include/uapi/asm/perf_regs.h
22 create mode 100644 arch/arm/kernel/perf_regs.c
23
24diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
25index 67874b8..6f630be 100644
26--- a/arch/arm/Kconfig
27+++ b/arch/arm/Kconfig
28@@ -46,6 +46,8 @@ config ARM
29 select HAVE_MEMBLOCK
30 select HAVE_OPROFILE if (HAVE_PERF_EVENTS)
31 select HAVE_PERF_EVENTS
32+ select HAVE_PERF_REGS
33+ select HAVE_PERF_USER_STACK_DUMP
34 select HAVE_REGS_AND_STACK_ACCESS_API
35 select HAVE_SYSCALL_TRACEPOINTS
36 select HAVE_UID16
37diff --git a/arch/arm/include/uapi/asm/Kbuild b/arch/arm/include/uapi/asm/Kbuild
38index 47bcb2d..570b82f 100644
39--- a/arch/arm/include/uapi/asm/Kbuild
40+++ b/arch/arm/include/uapi/asm/Kbuild
41@@ -8,6 +8,7 @@ header-y += hwcap.h
42 header-y += ioctls.h
43 header-y += kvm_para.h
44 header-y += mman.h
45+header-y += perf_regs.h
46 header-y += posix_types.h
47 header-y += ptrace.h
48 header-y += setup.h
49diff --git a/arch/arm/include/uapi/asm/perf_regs.h b/arch/arm/include/uapi/asm/perf_regs.h
50new file mode 100644
51index 0000000..ce59448
52--- /dev/null
53+++ b/arch/arm/include/uapi/asm/perf_regs.h
54@@ -0,0 +1,23 @@
55+#ifndef _ASM_ARM_PERF_REGS_H
56+#define _ASM_ARM_PERF_REGS_H
57+
58+enum perf_event_arm_regs {
59+ PERF_REG_ARM_R0,
60+ PERF_REG_ARM_R1,
61+ PERF_REG_ARM_R2,
62+ PERF_REG_ARM_R3,
63+ PERF_REG_ARM_R4,
64+ PERF_REG_ARM_R5,
65+ PERF_REG_ARM_R6,
66+ PERF_REG_ARM_R7,
67+ PERF_REG_ARM_R8,
68+ PERF_REG_ARM_R9,
69+ PERF_REG_ARM_R10,
70+ PERF_REG_ARM_FP,
71+ PERF_REG_ARM_IP,
72+ PERF_REG_ARM_SP,
73+ PERF_REG_ARM_LR,
74+ PERF_REG_ARM_PC,
75+ PERF_REG_ARM_MAX,
76+};
77+#endif /* _ASM_ARM_PERF_REGS_H */
78diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
79index 5bbec7b..c6ab18f 100644
80--- a/arch/arm/kernel/Makefile
81+++ b/arch/arm/kernel/Makefile
82@@ -69,6 +69,7 @@ obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o
83 obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o
84 obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o
85 obj-$(CONFIG_IWMMXT) += iwmmxt.o
86+obj-$(CONFIG_PERF_EVENTS) += perf_regs.o
87 obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o perf_event_cpu.o
88 AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
89 obj-$(CONFIG_ARM_CPU_TOPOLOGY) += topology.o
90diff --git a/arch/arm/kernel/perf_regs.c b/arch/arm/kernel/perf_regs.c
91new file mode 100644
92index 0000000..6e4379c
93--- /dev/null
94+++ b/arch/arm/kernel/perf_regs.c
95@@ -0,0 +1,30 @@
96+
97+#include <linux/errno.h>
98+#include <linux/kernel.h>
99+#include <linux/perf_event.h>
100+#include <linux/bug.h>
101+#include <asm/perf_regs.h>
102+#include <asm/ptrace.h>
103+
104+u64 perf_reg_value(struct pt_regs *regs, int idx)
105+{
106+ if (WARN_ON_ONCE((u32)idx >= PERF_REG_ARM_MAX))
107+ return 0;
108+
109+ return regs->uregs[idx];
110+}
111+
112+#define REG_RESERVED (~((1ULL << PERF_REG_ARM_MAX) - 1))
113+
114+int perf_reg_validate(u64 mask)
115+{
116+ if (!mask || mask & REG_RESERVED)
117+ return -EINVAL;
118+
119+ return 0;
120+}
121+
122+u64 perf_reg_abi(struct task_struct *task)
123+{
124+ return PERF_SAMPLE_REGS_ABI_32;
125+}
126--
1271.9.1
128