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