tracing: Enable adding dynamic events early stage
authorMasami Hiramatsu <mhiramat@kernel.org>
Thu, 10 Sep 2020 12:38:58 +0000 (21:38 +0900)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Tue, 22 Sep 2020 01:06:04 +0000 (21:06 -0400)
Split the event fields initialization from creating new event directory.
This allows the boot-time tracing to define dynamic events before
initializing events directory on tracefs.

Link: https://lkml.kernel.org/r/159974153790.478751.3475515065034825374.stgit@devnote2
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace_events.c

index 8e87fba..42c0e7d 100644 (file)
@@ -38,6 +38,7 @@ DEFINE_MUTEX(event_mutex);
 LIST_HEAD(ftrace_events);
 static LIST_HEAD(ftrace_generic_fields);
 static LIST_HEAD(ftrace_common_fields);
+static bool eventdir_initialized;
 
 #define GFP_TRACE (GFP_KERNEL | __GFP_ZERO)
 
@@ -2486,7 +2487,10 @@ __trace_add_new_event(struct trace_event_call *call, struct trace_array *tr)
        if (!file)
                return -ENOMEM;
 
-       return event_create_dir(tr->event_dir, file);
+       if (eventdir_initialized)
+               return event_create_dir(tr->event_dir, file);
+       else
+               return event_define_fields(call);
 }
 
 /*
@@ -3478,6 +3482,9 @@ __init int event_trace_init(void)
        if (ret)
                pr_warn("Failed to register trace events module notifier\n");
 #endif
+
+       eventdir_initialized = true;
+
        return 0;
 }