| From d045437a169f899dfb0f6f7ede24cc042543ced9 Mon Sep 17 00:00:00 2001 |
| From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org> |
| Date: Wed, 24 Feb 2016 09:04:24 -0500 |
| Subject: tracing: Fix showing function event in available_events |
| |
| From: Steven Rostedt (Red Hat) <rostedt@goodmis.org> |
| |
| commit d045437a169f899dfb0f6f7ede24cc042543ced9 upstream. |
| |
| The ftrace:function event is only displayed for parsing the function tracer |
| data. It is not used to enable function tracing, and does not include an |
| "enable" file in its event directory. |
| |
| Originally, this event was kept separate from other events because it did |
| not have a ->reg parameter. But perf added a "reg" parameter for its use |
| which caused issues, because it made the event available to functions where |
| it was not compatible for. |
| |
| Commit 9b63776fa3ca9 "tracing: Do not enable function event with enable" |
| added a TRACE_EVENT_FL_IGNORE_ENABLE flag that prevented the function event |
| from being enabled by normal trace events. But this commit missed keeping |
| the function event from being displayed by the "available_events" directory, |
| which is used to show what events can be enabled by set_event. |
| |
| One documented way to enable all events is to: |
| |
| cat available_events > set_event |
| |
| But because the function event is displayed in the available_events, this |
| now causes an INVALID error: |
| |
| cat: write error: Invalid argument |
| |
| Reported-by: Chunyu Hu <chuhu@redhat.com> |
| Fixes: 9b63776fa3ca9 "tracing: Do not enable function event with enable" |
| Signed-off-by: Steven Rostedt <rostedt@goodmis.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/trace/trace_events.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/kernel/trace/trace_events.c |
| +++ b/kernel/trace/trace_events.c |
| @@ -606,7 +606,8 @@ t_next(struct seq_file *m, void *v, loff |
| * The ftrace subsystem is for showing formats only. |
| * They can not be enabled or disabled via the event files. |
| */ |
| - if (call->class && call->class->reg) |
| + if (call->class && call->class->reg && |
| + !(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)) |
| return file; |
| } |
| |