]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
tracing/boot, kprobe, synth: Initialize boot-time tracing earlier
authorMasami Hiramatsu <mhiramat@kernel.org>
Thu, 10 Sep 2020 12:39:17 +0000 (21:39 +0900)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Tue, 22 Sep 2020 01:06:04 +0000 (21:06 -0400)
Initialize boot-time tracing in core_initcall_sync instead of
fs_initcall, and initialize required tracers (kprobes and synth)
in core_initcall. This will allow the boot-time tracing to trace
__init code from the beginning of postcore_initcall stage.

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

index d52d441a17e80ee0b1a20019e4780099ad766f91..754e3cf2df3a077627a8cf507c4a2643434016a6 100644 (file)
@@ -340,5 +340,8 @@ static int __init trace_boot_init(void)
 
        return 0;
 }
-
-fs_initcall(trace_boot_init);
+/*
+ * Start tracing at the end of core-initcall, so that it starts tracing
+ * from the beginning of postcore_initcall.
+ */
+core_initcall_sync(trace_boot_init);
index 7c765e80e974155ff3dd0e34deb241a7b854303f..a9cd7793f7ead4b8fc551cda600f02446638cdf4 100644 (file)
@@ -1754,17 +1754,26 @@ static const struct file_operations synth_events_fops = {
        .release        = seq_release,
 };
 
-static __init int trace_events_synth_init(void)
+/*
+ * Register dynevent at core_initcall. This allows kernel to setup kprobe
+ * events in postcore_initcall without tracefs.
+ */
+static __init int trace_events_synth_init_early(void)
 {
-       struct dentry *entry = NULL;
        int err = 0;
 
        err = dyn_event_register(&synth_event_ops);
-       if (err) {
+       if (err)
                pr_warn("Could not register synth_event_ops\n");
-               return err;
-       }
 
+       return err;
+}
+core_initcall(trace_events_synth_init_early);
+
+static __init int trace_events_synth_init(void)
+{
+       struct dentry *entry = NULL;
+       int err = 0;
        err = tracing_init_dentry();
        if (err)
                goto err;
index 9d46415296ebc5627d90c12f8a982fd204f49c81..b911e9f6d9f5c39032c0648238e7745536405cd5 100644 (file)
@@ -1897,8 +1897,8 @@ static __init void setup_boot_kprobe_events(void)
 }
 
 /*
- * Register dynevent at subsys_initcall. This allows kernel to setup kprobe
- * events in fs_initcall without tracefs.
+ * Register dynevent at core_initcall. This allows kernel to setup kprobe
+ * events in postcore_initcall without tracefs.
  */
 static __init int init_kprobe_trace_early(void)
 {
@@ -1913,7 +1913,7 @@ static __init int init_kprobe_trace_early(void)
 
        return 0;
 }
-subsys_initcall(init_kprobe_trace_early);
+core_initcall(init_kprobe_trace_early);
 
 /* Make a tracefs interface for controlling probe points */
 static __init int init_kprobe_trace(void)