diff options
author | Avi Kivity <avi@redhat.com> | 2011-06-29 11:42:35 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-07-01 05:06:38 -0400 |
commit | 4dc0da86967d5463708631d02a70cfed5b104884 (patch) | |
tree | e09071a62f2457b710ff69df3be1bff39340a4c6 /include/linux/perf_event.h | |
parent | 89d6c0b5bdbb1927775584dcf532d98b3efe1477 (diff) |
perf: Add context field to perf_event
The perf_event overflow handler does not receive any caller-derived
argument, so many callers need to resort to looking up the perf_event
in their local data structure. This is ugly and doesn't scale if a
single callback services many perf_events.
Fix by adding a context parameter to perf_event_create_kernel_counter()
(and derived hardware breakpoints APIs) and storing it in the perf_event.
The field can be accessed from the callback as event->overflow_handler_context.
All callers are updated.
Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1309362157-6596-2-git-send-email-avi@redhat.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux/perf_event.h')
-rw-r--r-- | include/linux/perf_event.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index a5f54b973bdb..2a08cacb1628 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
@@ -839,6 +839,7 @@ struct perf_event { | |||
839 | u64 id; | 839 | u64 id; |
840 | 840 | ||
841 | perf_overflow_handler_t overflow_handler; | 841 | perf_overflow_handler_t overflow_handler; |
842 | void *overflow_handler_context; | ||
842 | 843 | ||
843 | #ifdef CONFIG_EVENT_TRACING | 844 | #ifdef CONFIG_EVENT_TRACING |
844 | struct ftrace_event_call *tp_event; | 845 | struct ftrace_event_call *tp_event; |
@@ -960,7 +961,8 @@ extern struct perf_event * | |||
960 | perf_event_create_kernel_counter(struct perf_event_attr *attr, | 961 | perf_event_create_kernel_counter(struct perf_event_attr *attr, |
961 | int cpu, | 962 | int cpu, |
962 | struct task_struct *task, | 963 | struct task_struct *task, |
963 | perf_overflow_handler_t callback); | 964 | perf_overflow_handler_t callback, |
965 | void *context); | ||
964 | extern u64 perf_event_read_value(struct perf_event *event, | 966 | extern u64 perf_event_read_value(struct perf_event *event, |
965 | u64 *enabled, u64 *running); | 967 | u64 *enabled, u64 *running); |
966 | 968 | ||