mirror of https://gitee.com/openkylin/linux.git
trace: let boot trace be chosen by command line
Now that we have a working ftrace=<tracer> function, make the boot tracer get activated by it. This way we can turn it on or off without recompiling the kernel, as well as keeping the selftests on. The selftests are disabled whenever a default tracer starts running. Signed-off-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
b2821ae68b
commit
79fb0768fb
|
@ -164,9 +164,8 @@ config BOOT_TRACER
|
||||||
representation of the delays during initcalls - but the raw
|
representation of the delays during initcalls - but the raw
|
||||||
/debug/tracing/trace text output is readable too.
|
/debug/tracing/trace text output is readable too.
|
||||||
|
|
||||||
( Note that tracing self tests can't be enabled if this tracer is
|
You must pass in ftrace=initcall to the kernel command line
|
||||||
selected, because the self-tests are an initcall as well and that
|
to enable this on bootup.
|
||||||
would invalidate the boot trace. )
|
|
||||||
|
|
||||||
config TRACE_BRANCH_PROFILING
|
config TRACE_BRANCH_PROFILING
|
||||||
bool "Trace likely/unlikely profiler"
|
bool "Trace likely/unlikely profiler"
|
||||||
|
@ -326,7 +325,7 @@ config FTRACE_SELFTEST
|
||||||
|
|
||||||
config FTRACE_STARTUP_TEST
|
config FTRACE_STARTUP_TEST
|
||||||
bool "Perform a startup test on ftrace"
|
bool "Perform a startup test on ftrace"
|
||||||
depends on TRACING && DEBUG_KERNEL && !BOOT_TRACER
|
depends on TRACING && DEBUG_KERNEL
|
||||||
select FTRACE_SELFTEST
|
select FTRACE_SELFTEST
|
||||||
help
|
help
|
||||||
This option performs a series of startup tests on ftrace. On bootup
|
This option performs a series of startup tests on ftrace. On bootup
|
||||||
|
|
|
@ -3167,12 +3167,9 @@ __init static int tracer_alloc_buffers(void)
|
||||||
trace_init_cmdlines();
|
trace_init_cmdlines();
|
||||||
|
|
||||||
register_tracer(&nop_trace);
|
register_tracer(&nop_trace);
|
||||||
|
current_trace = &nop_trace;
|
||||||
#ifdef CONFIG_BOOT_TRACER
|
#ifdef CONFIG_BOOT_TRACER
|
||||||
register_tracer(&boot_tracer);
|
register_tracer(&boot_tracer);
|
||||||
current_trace = &boot_tracer;
|
|
||||||
current_trace->init(&global_trace);
|
|
||||||
#else
|
|
||||||
current_trace = &nop_trace;
|
|
||||||
#endif
|
#endif
|
||||||
/* All seems OK, enable tracing */
|
/* All seems OK, enable tracing */
|
||||||
tracing_disabled = 0;
|
tracing_disabled = 0;
|
||||||
|
|
|
@ -28,13 +28,13 @@ void start_boot_trace(void)
|
||||||
|
|
||||||
void enable_boot_trace(void)
|
void enable_boot_trace(void)
|
||||||
{
|
{
|
||||||
if (pre_initcalls_finished)
|
if (boot_trace && pre_initcalls_finished)
|
||||||
tracing_start_sched_switch_record();
|
tracing_start_sched_switch_record();
|
||||||
}
|
}
|
||||||
|
|
||||||
void disable_boot_trace(void)
|
void disable_boot_trace(void)
|
||||||
{
|
{
|
||||||
if (pre_initcalls_finished)
|
if (boot_trace && pre_initcalls_finished)
|
||||||
tracing_stop_sched_switch_record();
|
tracing_stop_sched_switch_record();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,6 +43,9 @@ static int boot_trace_init(struct trace_array *tr)
|
||||||
int cpu;
|
int cpu;
|
||||||
boot_trace = tr;
|
boot_trace = tr;
|
||||||
|
|
||||||
|
if (!tr)
|
||||||
|
return 0;
|
||||||
|
|
||||||
for_each_cpu(cpu, cpu_possible_mask)
|
for_each_cpu(cpu, cpu_possible_mask)
|
||||||
tracing_reset(tr, cpu);
|
tracing_reset(tr, cpu);
|
||||||
|
|
||||||
|
@ -132,7 +135,7 @@ void trace_boot_call(struct boot_trace_call *bt, initcall_t fn)
|
||||||
unsigned long irq_flags;
|
unsigned long irq_flags;
|
||||||
struct trace_array *tr = boot_trace;
|
struct trace_array *tr = boot_trace;
|
||||||
|
|
||||||
if (!pre_initcalls_finished)
|
if (!tr || !pre_initcalls_finished)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Get its name now since this function could
|
/* Get its name now since this function could
|
||||||
|
@ -164,7 +167,7 @@ void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn)
|
||||||
unsigned long irq_flags;
|
unsigned long irq_flags;
|
||||||
struct trace_array *tr = boot_trace;
|
struct trace_array *tr = boot_trace;
|
||||||
|
|
||||||
if (!pre_initcalls_finished)
|
if (!tr || !pre_initcalls_finished)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sprint_symbol(bt->func, (unsigned long)fn);
|
sprint_symbol(bt->func, (unsigned long)fn);
|
||||||
|
|
Loading…
Reference in New Issue