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>
This commit is contained in:
@ -638,7 +638,7 @@ void kgdb_arch_late(void)
|
||||
for (i = 0; i < HBP_NUM; i++) {
|
||||
if (breakinfo[i].pev)
|
||||
continue;
|
||||
breakinfo[i].pev = register_wide_hw_breakpoint(&attr, NULL);
|
||||
breakinfo[i].pev = register_wide_hw_breakpoint(&attr, NULL, NULL);
|
||||
if (IS_ERR((void * __force)breakinfo[i].pev)) {
|
||||
printk(KERN_ERR "kgdb: Could not allocate hw"
|
||||
"breakpoints\nDisabling the kernel debugger\n");
|
||||
|
@ -715,7 +715,8 @@ static int ptrace_set_breakpoint_addr(struct task_struct *tsk, int nr,
|
||||
attr.bp_type = HW_BREAKPOINT_W;
|
||||
attr.disabled = 1;
|
||||
|
||||
bp = register_user_hw_breakpoint(&attr, ptrace_triggered, tsk);
|
||||
bp = register_user_hw_breakpoint(&attr, ptrace_triggered,
|
||||
NULL, tsk);
|
||||
|
||||
/*
|
||||
* CHECKME: the previous code returned -EIO if the addr wasn't
|
||||
|
Reference in New Issue
Block a user