Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46e5376d authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Steven Rostedt (VMware)
Browse files

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: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent 455b2899
Loading
Loading
Loading
Loading
+3 −17
Original line number Diff line number Diff line
@@ -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
+16 −0
Original line number Diff line number Diff line
@@ -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;
}
+6 −0
Original line number Diff line number Diff line
@@ -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)
+3 −19
Original line number Diff line number Diff line
@@ -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