Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 79fb0768 authored by Steven Rostedt's avatar Steven Rostedt Committed by Ingo Molnar
Browse files

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: default avatarSteven Rostedt <srostedt@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent b2821ae6
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -164,9 +164,8 @@ config BOOT_TRACER
	  representation of the delays during initcalls - but the raw
	  /debug/tracing/trace text output is readable too.

	  ( Note that tracing self tests can't be enabled if this tracer is
	    selected, because the self-tests are an initcall as well and that
	    would invalidate the boot trace. )
	  You must pass in ftrace=initcall to the kernel command line
	  to enable this on bootup.

config TRACE_BRANCH_PROFILING
	bool "Trace likely/unlikely profiler"
@@ -326,7 +325,7 @@ config FTRACE_SELFTEST

config FTRACE_STARTUP_TEST
	bool "Perform a startup test on ftrace"
	depends on TRACING && DEBUG_KERNEL && !BOOT_TRACER
	depends on TRACING && DEBUG_KERNEL
	select FTRACE_SELFTEST
	help
	  This option performs a series of startup tests on ftrace. On bootup
+1 −4
Original line number Diff line number Diff line
@@ -3167,12 +3167,9 @@ __init static int tracer_alloc_buffers(void)
	trace_init_cmdlines();

	register_tracer(&nop_trace);
	current_trace = &nop_trace;
#ifdef CONFIG_BOOT_TRACER
	register_tracer(&boot_tracer);
	current_trace = &boot_tracer;
	current_trace->init(&global_trace);
#else
	current_trace = &nop_trace;
#endif
	/* All seems OK, enable tracing */
	tracing_disabled = 0;
+7 −4
Original line number Diff line number Diff line
@@ -28,13 +28,13 @@ void start_boot_trace(void)

void enable_boot_trace(void)
{
	if (pre_initcalls_finished)
	if (boot_trace && pre_initcalls_finished)
		tracing_start_sched_switch_record();
}

void disable_boot_trace(void)
{
	if (pre_initcalls_finished)
	if (boot_trace && pre_initcalls_finished)
		tracing_stop_sched_switch_record();
}

@@ -43,6 +43,9 @@ static int boot_trace_init(struct trace_array *tr)
	int cpu;
	boot_trace = tr;

	if (!tr)
		return 0;

	for_each_cpu(cpu, cpu_possible_mask)
		tracing_reset(tr, cpu);

@@ -132,7 +135,7 @@ void trace_boot_call(struct boot_trace_call *bt, initcall_t fn)
	unsigned long irq_flags;
	struct trace_array *tr = boot_trace;

	if (!pre_initcalls_finished)
	if (!tr || !pre_initcalls_finished)
		return;

	/* 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;
	struct trace_array *tr = boot_trace;

	if (!pre_initcalls_finished)
	if (!tr || !pre_initcalls_finished)
		return;

	sprint_symbol(bt->func, (unsigned long)fn);