tracing/probe: Add trace_event_call register API for trace_probe
authorMasami Hiramatsu <mhiramat@kernel.org>
Fri, 31 May 2019 15:17:16 +0000 (00:17 +0900)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Tue, 16 Jul 2019 19:14:47 +0000 (15:14 -0400)
Since trace_event_call is a field of trace_probe, these
operations should be done in trace_probe.c. trace_kprobe
and trace_uprobe use new functions to register/unregister
trace_event_call.

Link: http://lkml.kernel.org/r/155931583643.28323.14828411185591538876.stgit@devnote2
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace_kprobe.c
kernel/trace/trace_probe.c
kernel/trace/trace_probe.h
kernel/trace/trace_uprobe.c

index c43c2d4..7f802ee 100644 (file)
@@ -1393,28 +1393,14 @@ static inline void init_trace_event_call(struct trace_kprobe *tk,
 
 static int register_kprobe_event(struct trace_kprobe *tk)
 {
-       struct trace_event_call *call = &tk->tp.call;
-       int ret = 0;
-
-       init_trace_event_call(tk, call);
-
-       ret = register_trace_event(&call->event);
-       if (!ret)
-               return -ENODEV;
+       init_trace_event_call(tk, &tk->tp.call);
 
-       ret = trace_add_event_call(call);
-       if (ret) {
-               pr_info("Failed to register kprobe event: %s\n",
-                       trace_event_name(call));
-               unregister_trace_event(&call->event);
-       }
-       return ret;
+       return trace_probe_register_event_call(&tk->tp);
 }
 
 static int unregister_kprobe_event(struct trace_kprobe *tk)
 {
-       /* tp->event is unregistered in trace_remove_event_call() */
-       return trace_remove_event_call(&tk->tp.call);
+       return trace_probe_unregister_event_call(&tk->tp);
 }
 
 #ifdef CONFIG_PERF_EVENTS
index fe4ee2e..509a260 100644 (file)
@@ -920,3 +920,19 @@ int trace_probe_init(struct trace_probe *tp, const char *event,
 
        return 0;
 }
+
+int trace_probe_register_event_call(struct trace_probe *tp)
+{
+       struct trace_event_call *call = &tp->call;
+       int ret;
+
+       ret = register_trace_event(&call->event);
+       if (!ret)
+               return -ENODEV;
+
+       ret = trace_add_event_call(call);
+       if (ret)
+               unregister_trace_event(&call->event);
+
+       return ret;
+}
index 818b1d7..01d7b22 100644 (file)
@@ -251,6 +251,12 @@ static inline bool trace_probe_is_registered(struct trace_probe *tp)
 int trace_probe_init(struct trace_probe *tp, const char *event,
                     const char *group);
 void trace_probe_cleanup(struct trace_probe *tp);
+int trace_probe_register_event_call(struct trace_probe *tp);
+static inline int trace_probe_unregister_event_call(struct trace_probe *tp)
+{
+       /* tp->event is unregistered in trace_remove_event_call() */
+       return trace_remove_event_call(&tp->call);
+}
 
 /* Check the name is good for event/group/fields */
 static inline bool is_good_name(const char *name)
index b18b7eb..c262494 100644 (file)
@@ -1345,30 +1345,14 @@ static inline void init_trace_event_call(struct trace_uprobe *tu,
 
 static int register_uprobe_event(struct trace_uprobe *tu)
 {
-       struct trace_event_call *call = &tu->tp.call;
-       int ret = 0;
-
-       init_trace_event_call(tu, call);
-
-       ret = register_trace_event(&call->event);
-       if (!ret)
-               return -ENODEV;
-
-       ret = trace_add_event_call(call);
-
-       if (ret) {
-               pr_info("Failed to register uprobe event: %s\n",
-                       trace_event_name(call));
-               unregister_trace_event(&call->event);
-       }
+       init_trace_event_call(tu, &tu->tp.call);
 
-       return ret;
+       return trace_probe_register_event_call(&tu->tp);
 }
 
 static int unregister_uprobe_event(struct trace_uprobe *tu)
 {
-       /* tu->event is unregistered in trace_remove_event_call() */
-       return trace_remove_event_call(&tu->tp.call);
+       return trace_probe_unregister_event_call(&tu->tp);
 }
 
 #ifdef CONFIG_PERF_EVENTS