diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 36dfdf60a172..7007ed1e2512 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -9648,6 +9648,17 @@ out_unlock: return ret; } +const char *trace_array_get_system_names(struct trace_array *tr) +{ + struct trace_array_ext *tr_ext; + + if (tr == &global_trace) + return NULL; + + tr_ext = container_of(tr, struct trace_array_ext, trace_array); + return tr_ext->system_names; +} + struct trace_array *trace_array_get_by_name(const char *name) { return trace_array_get_by_name_ext(name, NULL); diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 1067161269c8..17e54ddc56d5 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -425,6 +425,7 @@ extern struct list_head ftrace_trace_arrays; extern struct mutex trace_types_lock; +extern const char *trace_array_get_system_names(struct trace_array *tr); extern int trace_array_get(struct trace_array *tr); extern int tracing_check_open_get_tr(struct trace_array *tr); extern struct trace_array *trace_array_find(const char *instance); diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 3901232f413c..5f0bd608bf90 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -3070,11 +3070,8 @@ trace_create_new_event(struct trace_event_call *call, struct trace_pid_list *pid_list; struct trace_event_file *file; unsigned int first; - struct trace_array_ext *tr_ext = container_of(tr, - struct trace_array_ext, - trace_array); - if (!event_in_systems(call, tr_ext->system_names)) + if (!event_in_systems(call, trace_array_get_system_names(tr))) return NULL; file = kmem_cache_alloc(file_cachep, GFP_TRACE);