mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
tracing/probe: Add trace_event_call register API for trace_probe
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>
This commit is contained in:
parent
455b289973
commit
46e5376d40
@ -1393,28 +1393,14 @@ static inline void init_trace_event_call(struct trace_kprobe *tk,
|
|||||||
|
|
||||||
static int register_kprobe_event(struct trace_kprobe *tk)
|
static int register_kprobe_event(struct trace_kprobe *tk)
|
||||||
{
|
{
|
||||||
struct trace_event_call *call = &tk->tp.call;
|
init_trace_event_call(tk, &tk->tp.call);
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
init_trace_event_call(tk, call);
|
return trace_probe_register_event_call(&tk->tp);
|
||||||
|
|
||||||
ret = register_trace_event(&call->event);
|
|
||||||
if (!ret)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int unregister_kprobe_event(struct trace_kprobe *tk)
|
static int unregister_kprobe_event(struct trace_kprobe *tk)
|
||||||
{
|
{
|
||||||
/* tp->event is unregistered in trace_remove_event_call() */
|
return trace_probe_unregister_event_call(&tk->tp);
|
||||||
return trace_remove_event_call(&tk->tp.call);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PERF_EVENTS
|
#ifdef CONFIG_PERF_EVENTS
|
||||||
|
@ -920,3 +920,19 @@ int trace_probe_init(struct trace_probe *tp, const char *event,
|
|||||||
|
|
||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
@ -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,
|
int trace_probe_init(struct trace_probe *tp, const char *event,
|
||||||
const char *group);
|
const char *group);
|
||||||
void trace_probe_cleanup(struct trace_probe *tp);
|
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 */
|
/* Check the name is good for event/group/fields */
|
||||||
static inline bool is_good_name(const char *name)
|
static inline bool is_good_name(const char *name)
|
||||||
|
@ -1345,30 +1345,14 @@ static inline void init_trace_event_call(struct trace_uprobe *tu,
|
|||||||
|
|
||||||
static int register_uprobe_event(struct trace_uprobe *tu)
|
static int register_uprobe_event(struct trace_uprobe *tu)
|
||||||
{
|
{
|
||||||
struct trace_event_call *call = &tu->tp.call;
|
init_trace_event_call(tu, &tu->tp.call);
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
init_trace_event_call(tu, call);
|
return trace_probe_register_event_call(&tu->tp);
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int unregister_uprobe_event(struct trace_uprobe *tu)
|
static int unregister_uprobe_event(struct trace_uprobe *tu)
|
||||||
{
|
{
|
||||||
/* tu->event is unregistered in trace_remove_event_call() */
|
return trace_probe_unregister_event_call(&tu->tp);
|
||||||
return trace_remove_event_call(&tu->tp.call);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PERF_EVENTS
|
#ifdef CONFIG_PERF_EVENTS
|
||||||
|
Loading…
Reference in New Issue
Block a user