[PATCH 3/4] perf_events: Support a lock_parent event flag

From: Andi Kleen
Date: Thu Sep 15 2011 - 18:57:27 EST


From: Andi Kleen <ak@xxxxxxxxxxxxxxx>

Add a new lock_parent flag to the event attribute. When it is set
account spinlocks to the parent. This is similar to how oprofile
behaves on x86. This just reuses the oprofile code for this.

The main advantage is that it allows to make more sense of locking
problems without requiring full callgraphs.

Right now only implemented on x86.

Signed-off-by: Andi Kleen <ak@xxxxxxxxxxxxxxx>
---
arch/x86/kernel/cpu/perf_event.c | 3 +++
include/linux/perf_event.h | 3 ++-
2 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index 373a614..f2caa6e 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1933,6 +1933,9 @@ unsigned long perf_instruction_pointer(struct pt_regs *regs,
else
ip = instruction_pointer(regs);

+ if (event->attr.lock_parent)
+ ip = __profile_pc(ip, regs);
+
return ip;
}

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index f8b93ec..51da085 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -219,8 +219,9 @@ struct perf_event_attr {
precise_ip : 2, /* skid constraint */
mmap_data : 1, /* non-exec mmap data */
sample_id_all : 1, /* sample_type all events */
+ lock_parent : 1, /* count locks in parent */

- __reserved_1 : 45;
+ __reserved_1 : 44;

union {
__u32 wakeup_events; /* wakeup every n events */
--
1.7.4.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/