Commit ba0fbfbb authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Steven Rostedt (VMware)

tracing/boot, kprobe, synth: Initialize boot-time tracing earlier

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@devnote2Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent 4114fbfd
...@@ -340,5 +340,8 @@ static int __init trace_boot_init(void) ...@@ -340,5 +340,8 @@ static int __init trace_boot_init(void)
return 0; 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);
...@@ -1754,17 +1754,26 @@ static const struct file_operations synth_events_fops = { ...@@ -1754,17 +1754,26 @@ static const struct file_operations synth_events_fops = {
.release = seq_release, .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; int err = 0;
err = dyn_event_register(&synth_event_ops); err = dyn_event_register(&synth_event_ops);
if (err) { if (err)
pr_warn("Could not register synth_event_ops\n"); 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(); err = tracing_init_dentry();
if (err) if (err)
goto err; goto err;
......
...@@ -1897,8 +1897,8 @@ static __init void setup_boot_kprobe_events(void) ...@@ -1897,8 +1897,8 @@ static __init void setup_boot_kprobe_events(void)
} }
/* /*
* Register dynevent at subsys_initcall. This allows kernel to setup kprobe * Register dynevent at core_initcall. This allows kernel to setup kprobe
* events in fs_initcall without tracefs. * events in postcore_initcall without tracefs.
*/ */
static __init int init_kprobe_trace_early(void) static __init int init_kprobe_trace_early(void)
{ {
...@@ -1913,7 +1913,7 @@ static __init int init_kprobe_trace_early(void) ...@@ -1913,7 +1913,7 @@ static __init int init_kprobe_trace_early(void)
return 0; return 0;
} }
subsys_initcall(init_kprobe_trace_early); core_initcall(init_kprobe_trace_early);
/* Make a tracefs interface for controlling probe points */ /* Make a tracefs interface for controlling probe points */
static __init int init_kprobe_trace(void) static __init int init_kprobe_trace(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment