aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/trace/Kconfig7
-rw-r--r--kernel/trace/trace.c5
-rw-r--r--kernel/trace/trace_boot.c11
3 files changed, 11 insertions, 12 deletions
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index dde1d46f77e5..28f2644484d9 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -164,9 +164,8 @@ config BOOT_TRACER
164 representation of the delays during initcalls - but the raw 164 representation of the delays during initcalls - but the raw
165 /debug/tracing/trace text output is readable too. 165 /debug/tracing/trace text output is readable too.
166 166
167 ( Note that tracing self tests can't be enabled if this tracer is 167 You must pass in ftrace=initcall to the kernel command line
168 selected, because the self-tests are an initcall as well and that 168 to enable this on bootup.
169 would invalidate the boot trace. )
170 169
171config TRACE_BRANCH_PROFILING 170config TRACE_BRANCH_PROFILING
172 bool "Trace likely/unlikely profiler" 171 bool "Trace likely/unlikely profiler"
@@ -326,7 +325,7 @@ config FTRACE_SELFTEST
326 325
327config FTRACE_STARTUP_TEST 326config FTRACE_STARTUP_TEST
328 bool "Perform a startup test on ftrace" 327 bool "Perform a startup test on ftrace"
329 depends on TRACING && DEBUG_KERNEL && !BOOT_TRACER 328 depends on TRACING && DEBUG_KERNEL
330 select FTRACE_SELFTEST 329 select FTRACE_SELFTEST
331 help 330 help
332 This option performs a series of startup tests on ftrace. On bootup 331 This option performs a series of startup tests on ftrace. On bootup
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 2c720c79bc60..40edef4255c5 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3167,12 +3167,9 @@ __init static int tracer_alloc_buffers(void)
3167 trace_init_cmdlines(); 3167 trace_init_cmdlines();
3168 3168
3169 register_tracer(&nop_trace); 3169 register_tracer(&nop_trace);
3170 current_trace = &nop_trace;
3170#ifdef CONFIG_BOOT_TRACER 3171#ifdef CONFIG_BOOT_TRACER
3171 register_tracer(&boot_tracer); 3172 register_tracer(&boot_tracer);
3172 current_trace = &boot_tracer;
3173 current_trace->init(&global_trace);
3174#else
3175 current_trace = &nop_trace;
3176#endif 3173#endif
3177 /* All seems OK, enable tracing */ 3174 /* All seems OK, enable tracing */
3178 tracing_disabled = 0; 3175 tracing_disabled = 0;
diff --git a/kernel/trace/trace_boot.c b/kernel/trace/trace_boot.c
index 0e94b3d091f7..1f07895977a0 100644
--- a/kernel/trace/trace_boot.c
+++ b/kernel/trace/trace_boot.c
@@ -28,13 +28,13 @@ void start_boot_trace(void)
28 28
29void enable_boot_trace(void) 29void enable_boot_trace(void)
30{ 30{
31 if (pre_initcalls_finished) 31 if (boot_trace && pre_initcalls_finished)
32 tracing_start_sched_switch_record(); 32 tracing_start_sched_switch_record();
33} 33}
34 34
35void disable_boot_trace(void) 35void disable_boot_trace(void)
36{ 36{
37 if (pre_initcalls_finished) 37 if (boot_trace && pre_initcalls_finished)
38 tracing_stop_sched_switch_record(); 38 tracing_stop_sched_switch_record();
39} 39}
40 40
@@ -43,6 +43,9 @@ static int boot_trace_init(struct trace_array *tr)
43 int cpu; 43 int cpu;
44 boot_trace = tr; 44 boot_trace = tr;
45 45
46 if (!tr)
47 return 0;
48
46 for_each_cpu(cpu, cpu_possible_mask) 49 for_each_cpu(cpu, cpu_possible_mask)
47 tracing_reset(tr, cpu); 50 tracing_reset(tr, cpu);
48 51
@@ -132,7 +135,7 @@ void trace_boot_call(struct boot_trace_call *bt, initcall_t fn)
132 unsigned long irq_flags; 135 unsigned long irq_flags;
133 struct trace_array *tr = boot_trace; 136 struct trace_array *tr = boot_trace;
134 137
135 if (!pre_initcalls_finished) 138 if (!tr || !pre_initcalls_finished)
136 return; 139 return;
137 140
138 /* Get its name now since this function could 141 /* Get its name now since this function could
@@ -164,7 +167,7 @@ void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn)
164 unsigned long irq_flags; 167 unsigned long irq_flags;
165 struct trace_array *tr = boot_trace; 168 struct trace_array *tr = boot_trace;
166 169
167 if (!pre_initcalls_finished) 170 if (!tr || !pre_initcalls_finished)
168 return; 171 return;
169 172
170 sprint_symbol(bt->func, (unsigned long)fn); 173 sprint_symbol(bt->func, (unsigned long)fn);