tracing: kprobes: Register to dynevent earlier stage
authorMasami Hiramatsu <mhiramat@kernel.org>
Fri, 10 Jan 2020 16:05:42 +0000 (01:05 +0900)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Mon, 13 Jan 2020 18:19:41 +0000 (13:19 -0500)
Register kprobe event to dynevent in subsys_initcall level.
This will allow kernel to register new kprobe events in
fs_initcall level via trace_run_command.

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

index 33a6a661904bd3d274cbd72389660bebcedeb99b..8113d6aa7bc58bda5444bffd9b0ed1a50c32b009 100644 (file)
@@ -1685,11 +1685,12 @@ static __init void setup_boot_kprobe_events(void)
        enable_boot_kprobe_events();
 }
 
-/* Make a tracefs interface for controlling probe points */
-static __init int init_kprobe_trace(void)
+/*
+ * Register dynevent at subsys_initcall. This allows kernel to setup kprobe
+ * events in fs_initcall without tracefs.
+ */
+static __init int init_kprobe_trace_early(void)
 {
-       struct dentry *d_tracer;
-       struct dentry *entry;
        int ret;
 
        ret = dyn_event_register(&trace_kprobe_ops);
@@ -1699,6 +1700,16 @@ static __init int init_kprobe_trace(void)
        if (register_module_notifier(&trace_kprobe_module_nb))
                return -EINVAL;
 
+       return 0;
+}
+subsys_initcall(init_kprobe_trace_early);
+
+/* Make a tracefs interface for controlling probe points */
+static __init int init_kprobe_trace(void)
+{
+       struct dentry *d_tracer;
+       struct dentry *entry;
+
        d_tracer = tracing_init_dentry();
        if (IS_ERR(d_tracer))
                return 0;