On Mon, 2 May 2016 22:14:14 +0800 Chunyu Hu <[email protected]> wrote:
> Currently register function of the event will be called > through the 'reg' field of event class directly without > any check when seting up triggers. > > Triggers for events that don't support register through > debug fs (events under events/ftrace are for perf to Actually, they were created for trace-cmd. I'm not even sure if perf uses the ftrace event formats. > read event format, and most of them don't have regisgter > function except events/ftrace/function.) can't be enabled > at all, and an oops will be hit when setting up trigger > for those events, so just not showing them is an easy way > to avoid the oops. > > Signed-off-by: Chunyu Hu <[email protected]> > --- > kernel/trace/trace_events.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c > index da1eeb6..9fb99fd 100644 > --- a/kernel/trace/trace_events.c > +++ b/kernel/trace/trace_events.c > @@ -2138,9 +2138,10 @@ event_create_dir(struct dentry *parent, struct > trace_event_file *file) > trace_create_file("filter", 0644, file->dir, file, > &ftrace_event_filter_fops); > > - trace_create_file("trigger", 0644, file->dir, file, > - &event_trigger_fops); > - > + if (call->class->reg) { > + trace_create_file("trigger", 0644, file->dir, file, > + &event_trigger_fops); > + } As you stated, reg is there for function tracing, and is not a good value to use as a check. Use the following check instead: if (!(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)) trace_create_file("trigger", 0644, file->dir, file, &event_trigger_fops); And add a comment that states that only event directories that can be enabled should have triggers. -- Steve > #ifdef CONFIG_HIST_TRIGGERS > trace_create_file("hist", 0444, file->dir, file, > &event_hist_fops);

