ftrace, perf: Add add/del tracepoint perf registration actions
authorJiri Olsa <jolsa@redhat.com>
Wed, 15 Feb 2012 14:51:50 +0000 (15:51 +0100)
committerSteven Rostedt <rostedt@goodmis.org>
Tue, 21 Feb 2012 16:08:25 +0000 (11:08 -0500)
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.com
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
include/linux/ftrace_event.h
kernel/trace/trace_event_perf.c
kernel/trace/trace_events.c
kernel/trace/trace_kprobe.c
kernel/trace/trace_syscalls.c

index 195e3606ddd7d1ad8f0d169b1f282e23767b2c91..2bf677cb2d6f62a9e2c2c738b919a66b1daeb6a9 100644 (file)
@@ -148,6 +148,8 @@ enum trace_reg {
        TRACE_REG_PERF_UNREGISTER,
        TRACE_REG_PERF_OPEN,
        TRACE_REG_PERF_CLOSE,
+       TRACE_REG_PERF_ADD,
+       TRACE_REG_PERF_DEL,
 };
 
 struct ftrace_event_call;
index 0cfcc37f63de74d4274b5e69eb263257331704bc..d72af0b0382272450de3073f90879d19f862f53b 100644 (file)
@@ -211,12 +211,14 @@ int perf_trace_add(struct perf_event *p_event, int flags)
        list = this_cpu_ptr(pcpu_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)
 {
+       struct ftrace_event_call *tp_event = p_event->tp_event;
        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,
index 5138fea37908ee4fd0e9dcdb74a132dd212d0945..079a93ae8a9db67ff990300024a8dce0f08cd4e1 100644 (file)
@@ -173,6 +173,8 @@ int ftrace_event_reg(struct ftrace_event_call *call,
                return 0;
        case TRACE_REG_PERF_OPEN:
        case TRACE_REG_PERF_CLOSE:
+       case TRACE_REG_PERF_ADD:
+       case TRACE_REG_PERF_DEL:
                return 0;
 #endif
        }
index 5667f8958cc9b51b68c8eb5796d1bff34f51ac4f..580a05ec926b46acad474f729f76b62845c8e200 100644 (file)
@@ -1912,6 +1912,8 @@ int kprobe_register(struct ftrace_event_call *event,
                return 0;
        case TRACE_REG_PERF_OPEN:
        case TRACE_REG_PERF_CLOSE:
+       case TRACE_REG_PERF_ADD:
+       case TRACE_REG_PERF_DEL:
                return 0;
 #endif
        }
index e23515f51ed49c500d59c306e69c257cfe56c921..96fc733690992bf97dc610c87ff2a6b0ecbb97d8 100644 (file)
@@ -666,6 +666,8 @@ static int syscall_enter_register(struct ftrace_event_call *event,
                return 0;
        case TRACE_REG_PERF_OPEN:
        case TRACE_REG_PERF_CLOSE:
+       case TRACE_REG_PERF_ADD:
+       case TRACE_REG_PERF_DEL:
                return 0;
 #endif
        }
@@ -690,6 +692,8 @@ static int syscall_exit_register(struct ftrace_event_call *event,
                return 0;
        case TRACE_REG_PERF_OPEN:
        case TRACE_REG_PERF_CLOSE:
+       case TRACE_REG_PERF_ADD:
+       case TRACE_REG_PERF_DEL:
                return 0;
 #endif
        }