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

Commit 9b63776f authored by Steven Rostedt's avatar Steven Rostedt Committed by Steven Rostedt
Browse files

tracing: Do not enable function event with enable



With the adding of function tracing event to perf, it caused a
side effect that produces the following warning when enabling all
events in ftrace:

 # echo 1 > /sys/kernel/debug/tracing/events/enable

[console]
event trace: Could not enable event function

This is because when enabling all events via the debugfs system
it ignores events that do not have a ->reg() function assigned.
This was to skip over the ftrace internal events (as they are
not TRACE_EVENTs). But as the ftrace function event now has
a ->reg() function attached to it for use with perf, it is no
longer ignored.

Worse yet, this ->reg() function is being called when it should
not be. It returns an error and causes the above warning to
be printed.

By adding a new event_call flag (TRACE_EVENT_FL_IGNORE_ENABLE)
and have all ftrace internel event structures have it set,
setting the events/enable will no longe try to incorrectly enable
the function event and does not warn.

Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent 20d23aaa
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -179,6 +179,7 @@ enum {
	TRACE_EVENT_FL_RECORDED_CMD_BIT,
	TRACE_EVENT_FL_RECORDED_CMD_BIT,
	TRACE_EVENT_FL_CAP_ANY_BIT,
	TRACE_EVENT_FL_CAP_ANY_BIT,
	TRACE_EVENT_FL_NO_SET_FILTER_BIT,
	TRACE_EVENT_FL_NO_SET_FILTER_BIT,
	TRACE_EVENT_FL_IGNORE_ENABLE_BIT,
};
};


enum {
enum {
@@ -187,6 +188,7 @@ enum {
	TRACE_EVENT_FL_RECORDED_CMD	= (1 << TRACE_EVENT_FL_RECORDED_CMD_BIT),
	TRACE_EVENT_FL_RECORDED_CMD	= (1 << TRACE_EVENT_FL_RECORDED_CMD_BIT),
	TRACE_EVENT_FL_CAP_ANY		= (1 << TRACE_EVENT_FL_CAP_ANY_BIT),
	TRACE_EVENT_FL_CAP_ANY		= (1 << TRACE_EVENT_FL_CAP_ANY_BIT),
	TRACE_EVENT_FL_NO_SET_FILTER	= (1 << TRACE_EVENT_FL_NO_SET_FILTER_BIT),
	TRACE_EVENT_FL_NO_SET_FILTER	= (1 << TRACE_EVENT_FL_NO_SET_FILTER_BIT),
	TRACE_EVENT_FL_IGNORE_ENABLE	= (1 << TRACE_EVENT_FL_IGNORE_ENABLE_BIT),
};
};


struct ftrace_event_call {
struct ftrace_event_call {
+4 −1
Original line number Original line Diff line number Diff line
@@ -294,6 +294,9 @@ static int __ftrace_set_clr_event(const char *match, const char *sub,
		if (!call->name || !call->class || !call->class->reg)
		if (!call->name || !call->class || !call->class->reg)
			continue;
			continue;


		if (call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)
			continue;

		if (match &&
		if (match &&
		    strcmp(match, call->name) != 0 &&
		    strcmp(match, call->name) != 0 &&
		    strcmp(match, call->class->system) != 0)
		    strcmp(match, call->class->system) != 0)
@@ -1164,7 +1167,7 @@ event_create_dir(struct ftrace_event_call *call, struct dentry *d_events,
		return -1;
		return -1;
	}
	}


	if (call->class->reg)
	if (call->class->reg && !(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))
		trace_create_file("enable", 0644, call->dir, call,
		trace_create_file("enable", 0644, call->dir, call,
				  enable);
				  enable);


+1 −0
Original line number Original line Diff line number Diff line
@@ -180,6 +180,7 @@ struct ftrace_event_call __used event_##call = { \
	.event.type		= etype,				\
	.event.type		= etype,				\
	.class			= &event_class_ftrace_##call,		\
	.class			= &event_class_ftrace_##call,		\
	.print_fmt		= print,				\
	.print_fmt		= print,				\
	.flags			= TRACE_EVENT_FL_IGNORE_ENABLE,		\
};									\
};									\
struct ftrace_event_call __used						\
struct ftrace_event_call __used						\
__attribute__((section("_ftrace_events"))) *__event_##call = &event_##call;
__attribute__((section("_ftrace_events"))) *__event_##call = &event_##call;