diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-10-23 18:38:17 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-10-23 18:38:17 -0400 |
commit | 901e7e34f83fc8fb4ce82cb29e5b500b7559cd86 (patch) | |
tree | e3d42fb45f005560a43f195177a98e752ac4737a /arch/arm/kernel | |
parent | 8754c4bf2ac1a64d5c1409a0ae98e21a8f3541c5 (diff) | |
parent | 2dfcb802d6bd54a2353678c6434846d94b058f2c (diff) |
Merge branch 'for-rmk/perf' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into devel-stable
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/kernel/perf_event.c | 3 | ||||
-rw-r--r-- | arch/arm/kernel/perf_regs.c | 30 |
3 files changed, 32 insertions, 2 deletions
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index 5140df5f23aa..9b818ca3610b 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile | |||
@@ -78,6 +78,7 @@ obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o | |||
78 | obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o | 78 | obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o |
79 | obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o | 79 | obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o |
80 | obj-$(CONFIG_IWMMXT) += iwmmxt.o | 80 | obj-$(CONFIG_IWMMXT) += iwmmxt.o |
81 | obj-$(CONFIG_PERF_EVENTS) += perf_regs.o | ||
81 | obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o perf_event_cpu.o | 82 | obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o perf_event_cpu.o |
82 | AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt | 83 | AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt |
83 | obj-$(CONFIG_ARM_CPU_TOPOLOGY) += topology.o | 84 | obj-$(CONFIG_ARM_CPU_TOPOLOGY) += topology.o |
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index e186ee1e63f6..bc3f2efa0d86 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c | |||
@@ -256,12 +256,11 @@ validate_event(struct pmu_hw_events *hw_events, | |||
256 | struct perf_event *event) | 256 | struct perf_event *event) |
257 | { | 257 | { |
258 | struct arm_pmu *armpmu = to_arm_pmu(event->pmu); | 258 | struct arm_pmu *armpmu = to_arm_pmu(event->pmu); |
259 | struct pmu *leader_pmu = event->group_leader->pmu; | ||
260 | 259 | ||
261 | if (is_software_event(event)) | 260 | if (is_software_event(event)) |
262 | return 1; | 261 | return 1; |
263 | 262 | ||
264 | if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF) | 263 | if (event->state < PERF_EVENT_STATE_OFF) |
265 | return 1; | 264 | return 1; |
266 | 265 | ||
267 | if (event->state == PERF_EVENT_STATE_OFF && !event->attr.enable_on_exec) | 266 | if (event->state == PERF_EVENT_STATE_OFF && !event->attr.enable_on_exec) |
diff --git a/arch/arm/kernel/perf_regs.c b/arch/arm/kernel/perf_regs.c new file mode 100644 index 000000000000..6e4379c67cbc --- /dev/null +++ b/arch/arm/kernel/perf_regs.c | |||
@@ -0,0 +1,30 @@ | |||
1 | |||
2 | #include <linux/errno.h> | ||
3 | #include <linux/kernel.h> | ||
4 | #include <linux/perf_event.h> | ||
5 | #include <linux/bug.h> | ||
6 | #include <asm/perf_regs.h> | ||
7 | #include <asm/ptrace.h> | ||
8 | |||
9 | u64 perf_reg_value(struct pt_regs *regs, int idx) | ||
10 | { | ||
11 | if (WARN_ON_ONCE((u32)idx >= PERF_REG_ARM_MAX)) | ||
12 | return 0; | ||
13 | |||
14 | return regs->uregs[idx]; | ||
15 | } | ||
16 | |||
17 | #define REG_RESERVED (~((1ULL << PERF_REG_ARM_MAX) - 1)) | ||
18 | |||
19 | int perf_reg_validate(u64 mask) | ||
20 | { | ||
21 | if (!mask || mask & REG_RESERVED) | ||
22 | return -EINVAL; | ||
23 | |||
24 | return 0; | ||
25 | } | ||
26 | |||
27 | u64 perf_reg_abi(struct task_struct *task) | ||
28 | { | ||
29 | return PERF_SAMPLE_REGS_ABI_32; | ||
30 | } | ||