----- Original Message ----- > From: "Steven Rostedt" <rostedt@xxxxxxxxxxx> > To: linux-kernel@xxxxxxxxxxxxxxx > Cc: "Ingo Molnar" <mingo@xxxxxxxxxx>, "Andrew Morton" <akpm@xxxxxxxxxxxxxxxxxxxx>, "Peter Zijlstra" > <peterz@xxxxxxxxxxxxx>, "Frederic Weisbecker" <fweisbec@xxxxxxxxx>, "Mathieu Desnoyers" > <mathieu.desnoyers@xxxxxxxxxxxx>, stable@xxxxxxxxxxxxxxx, "Rusty Russell" <rusty@xxxxxxxxxxxxxxx> > Sent: Thursday, February 27, 2014 10:46:19 AM > Subject: [RFA][PATCH 3/5] tracing: Do not add event files for modules that fail tracepoints > > [Request for Ack] > > From: "Steven Rostedt (Red Hat)" <rostedt@xxxxxxxxxxx> > > If a module fails to add its tracepoints due to module tainting, do not > create the module event infrastructure in the debugfs directory. As the > events > will not work and worse yet, they will silently fail, making the user wonder > why the events they enable do not display anything. > > Having a warning on module load and the events not visible to the users > will make the cause of the problem much clearer. Looks good! Acked-by: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx> > > Fixes: 6d723736e472 "tracing/events: add support for modules to TRACE_EVENT" > Cc: stable@xxxxxxxxxxxxxxx # 2.6.31+ > Cc: Rusty Russell <rusty@xxxxxxxxxxxxxxx> > Cc: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx> > Signed-off-by: Steven Rostedt <rostedt@xxxxxxxxxxx> > --- > include/linux/tracepoint.h | 6 ++++++ > kernel/trace/trace_events.c | 4 ++++ > kernel/tracepoint.c | 7 ++++++- > 3 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h > index accc497..7159a0a 100644 > --- a/include/linux/tracepoint.h > +++ b/include/linux/tracepoint.h > @@ -60,6 +60,12 @@ struct tp_module { > unsigned int num_tracepoints; > struct tracepoint * const *tracepoints_ptrs; > }; > +bool trace_module_has_bad_taint(struct module *mod); > +#else > +static inline bool trace_module_has_bad_taint(struct module *mod) > +{ > + return false; > +} > #endif /* CONFIG_MODULES */ > > struct tracepoint_iter { > diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c > index e71ffd4..b2fee73 100644 > --- a/kernel/trace/trace_events.c > +++ b/kernel/trace/trace_events.c > @@ -1777,6 +1777,10 @@ static void trace_module_add_events(struct module > *mod) > { > struct ftrace_event_call **call, **start, **end; > > + /* Don't add infrastructure for mods without tracepoints */ > + if (trace_module_has_bad_taint(mod)) > + return; > + > start = mod->trace_events; > end = mod->trace_events + mod->num_trace_events; > > diff --git a/kernel/tracepoint.c b/kernel/tracepoint.c > index 29f2654..031cc56 100644 > --- a/kernel/tracepoint.c > +++ b/kernel/tracepoint.c > @@ -631,6 +631,11 @@ void tracepoint_iter_reset(struct tracepoint_iter *iter) > EXPORT_SYMBOL_GPL(tracepoint_iter_reset); > > #ifdef CONFIG_MODULES > +bool trace_module_has_bad_taint(struct module *mod) > +{ > + return mod->taints & ~((1 << TAINT_OOT_MODULE) | (1 << TAINT_CRAP)); > +} > + > static int tracepoint_module_coming(struct module *mod) > { > struct tp_module *tp_mod, *iter; > @@ -641,7 +646,7 @@ static int tracepoint_module_coming(struct module *mod) > * module headers (for forced load), to make sure we don't cause a crash. > * Staging and out-of-tree GPL modules are fine. > */ > - if (mod->taints & ~((1 << TAINT_OOT_MODULE) | (1 << TAINT_CRAP))) > + if (trace_module_has_bad_taint(mod)) > return 0; > mutex_lock(&tracepoints_mutex); > tp_mod = kmalloc(sizeof(struct tp_module), GFP_KERNEL); > -- > 1.8.5.3 > > > -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html