diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2009-03-30 13:07:14 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-04-06 03:30:43 -0400 |
commit | 394ee07623cf556c8daae2b3c00cf5fea47f0811 (patch) | |
tree | f3568c9d779c282732c7bbeccb75a4bb3041b857 /include/linux | |
parent | 023c54c42288416b4f43c67bfd5049a76926fad6 (diff) |
perf_counter: provide generic callchain bits
Provide the generic callchain support bits. If hw_event->callchain is
set the arch specific perf_callchain() function is called upon to
provide a perf_callchain_entry structure filled with the current
callchain.
If it does so, it is added to the overflow output event.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Paul Mackerras <paulus@samba.org>
Orig-LKML-Reference: <20090330171024.254266860@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/perf_counter.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index edf5bfb7ff51..43083afffe0f 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h | |||
@@ -140,8 +140,9 @@ struct perf_counter_hw_event { | |||
140 | include_tid : 1, /* include the tid */ | 140 | include_tid : 1, /* include the tid */ |
141 | mmap : 1, /* include mmap data */ | 141 | mmap : 1, /* include mmap data */ |
142 | munmap : 1, /* include munmap data */ | 142 | munmap : 1, /* include munmap data */ |
143 | callchain : 1, /* add callchain data */ | ||
143 | 144 | ||
144 | __reserved_1 : 52; | 145 | __reserved_1 : 51; |
145 | 146 | ||
146 | __u32 extra_config_len; | 147 | __u32 extra_config_len; |
147 | __u32 __reserved_4; | 148 | __u32 __reserved_4; |
@@ -219,6 +220,7 @@ enum perf_event_type { | |||
219 | PERF_EVENT_OVERFLOW = 1UL << 31, | 220 | PERF_EVENT_OVERFLOW = 1UL << 31, |
220 | __PERF_EVENT_IP = 1UL << 30, | 221 | __PERF_EVENT_IP = 1UL << 30, |
221 | __PERF_EVENT_TID = 1UL << 29, | 222 | __PERF_EVENT_TID = 1UL << 29, |
223 | __PERF_EVENT_CALLCHAIN = 1UL << 28, | ||
222 | }; | 224 | }; |
223 | 225 | ||
224 | #ifdef __KERNEL__ | 226 | #ifdef __KERNEL__ |
@@ -504,6 +506,15 @@ extern void perf_counter_mmap(unsigned long addr, unsigned long len, | |||
504 | extern void perf_counter_munmap(unsigned long addr, unsigned long len, | 506 | extern void perf_counter_munmap(unsigned long addr, unsigned long len, |
505 | unsigned long pgoff, struct file *file); | 507 | unsigned long pgoff, struct file *file); |
506 | 508 | ||
509 | #define MAX_STACK_DEPTH 255 | ||
510 | |||
511 | struct perf_callchain_entry { | ||
512 | u64 nr; | ||
513 | u64 ip[MAX_STACK_DEPTH]; | ||
514 | }; | ||
515 | |||
516 | extern struct perf_callchain_entry *perf_callchain(struct pt_regs *regs); | ||
517 | |||
507 | #else | 518 | #else |
508 | static inline void | 519 | static inline void |
509 | perf_counter_task_sched_in(struct task_struct *task, int cpu) { } | 520 | perf_counter_task_sched_in(struct task_struct *task, int cpu) { } |