Commit 489c75c3 authored by Jiri Olsa's avatar Jiri Olsa Committed by Steven Rostedt

ftrace, perf: Add add/del tracepoint perf registration actions

Adding TRACE_REG_PERF_ADD and TRACE_REG_PERF_DEL to handle
perf event schedule in/out actions.

The add action is invoked for when the perf event is scheduled in,
while the del action is invoked when the event is scheduled out.

Link: http://lkml.kernel.org/r/1329317514-8131-4-git-send-email-jolsa@redhat.comAcked-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: default avatarJiri Olsa <jolsa@redhat.com>
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent ceec0b6f
...@@ -148,6 +148,8 @@ enum trace_reg { ...@@ -148,6 +148,8 @@ enum trace_reg {
TRACE_REG_PERF_UNREGISTER, TRACE_REG_PERF_UNREGISTER,
TRACE_REG_PERF_OPEN, TRACE_REG_PERF_OPEN,
TRACE_REG_PERF_CLOSE, TRACE_REG_PERF_CLOSE,
TRACE_REG_PERF_ADD,
TRACE_REG_PERF_DEL,
}; };
struct ftrace_event_call; struct ftrace_event_call;
......
...@@ -211,12 +211,14 @@ int perf_trace_add(struct perf_event *p_event, int flags) ...@@ -211,12 +211,14 @@ int perf_trace_add(struct perf_event *p_event, int flags)
list = this_cpu_ptr(pcpu_list); list = this_cpu_ptr(pcpu_list);
hlist_add_head_rcu(&p_event->hlist_entry, list); hlist_add_head_rcu(&p_event->hlist_entry, list);
return 0; return tp_event->class->reg(tp_event, TRACE_REG_PERF_ADD, p_event);
} }
void perf_trace_del(struct perf_event *p_event, int flags) void perf_trace_del(struct perf_event *p_event, int flags)
{ {
struct ftrace_event_call *tp_event = p_event->tp_event;
hlist_del_rcu(&p_event->hlist_entry); hlist_del_rcu(&p_event->hlist_entry);
tp_event->class->reg(tp_event, TRACE_REG_PERF_DEL, p_event);
} }
__kprobes void *perf_trace_buf_prepare(int size, unsigned short type, __kprobes void *perf_trace_buf_prepare(int size, unsigned short type,
......
...@@ -173,6 +173,8 @@ int ftrace_event_reg(struct ftrace_event_call *call, ...@@ -173,6 +173,8 @@ int ftrace_event_reg(struct ftrace_event_call *call,
return 0; return 0;
case TRACE_REG_PERF_OPEN: case TRACE_REG_PERF_OPEN:
case TRACE_REG_PERF_CLOSE: case TRACE_REG_PERF_CLOSE:
case TRACE_REG_PERF_ADD:
case TRACE_REG_PERF_DEL:
return 0; return 0;
#endif #endif
} }
......
...@@ -1912,6 +1912,8 @@ int kprobe_register(struct ftrace_event_call *event, ...@@ -1912,6 +1912,8 @@ int kprobe_register(struct ftrace_event_call *event,
return 0; return 0;
case TRACE_REG_PERF_OPEN: case TRACE_REG_PERF_OPEN:
case TRACE_REG_PERF_CLOSE: case TRACE_REG_PERF_CLOSE:
case TRACE_REG_PERF_ADD:
case TRACE_REG_PERF_DEL:
return 0; return 0;
#endif #endif
} }
......
...@@ -666,6 +666,8 @@ static int syscall_enter_register(struct ftrace_event_call *event, ...@@ -666,6 +666,8 @@ static int syscall_enter_register(struct ftrace_event_call *event,
return 0; return 0;
case TRACE_REG_PERF_OPEN: case TRACE_REG_PERF_OPEN:
case TRACE_REG_PERF_CLOSE: case TRACE_REG_PERF_CLOSE:
case TRACE_REG_PERF_ADD:
case TRACE_REG_PERF_DEL:
return 0; return 0;
#endif #endif
} }
...@@ -690,6 +692,8 @@ static int syscall_exit_register(struct ftrace_event_call *event, ...@@ -690,6 +692,8 @@ static int syscall_exit_register(struct ftrace_event_call *event,
return 0; return 0;
case TRACE_REG_PERF_OPEN: case TRACE_REG_PERF_OPEN:
case TRACE_REG_PERF_CLOSE: case TRACE_REG_PERF_CLOSE:
case TRACE_REG_PERF_ADD:
case TRACE_REG_PERF_DEL:
return 0; return 0;
#endif #endif
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment