Commit 020e5f85 authored by Li Zefan's avatar Li Zefan Committed by Ingo Molnar
Browse files

tracing/events: Add trace_event boot option

We already have ftrace= boot option, and this adds a similar
boot option for trace events, so allow trace events to be
enabled at boot, for boot debugging purpose.
Signed-off-by: default avatarLi Zefan <>
Cc: Steven Rostedt <>
Cc: Frederic Weisbecker <>
LKML-Reference: <>
Signed-off-by: default avatarIngo Molnar <>
parent c5cb5a2d
......@@ -2478,6 +2478,11 @@ and is between 256 and 4096 characters. It is defined in the file
[FTRACE] will set tracing buffer size.
[FTRACE] Set and start specified trace events in order
to facilitate early boot debugging.
See also Documentation/trace/events.txt
trix= [HW,OSS] MediaTrix AudioTrix Pro
......@@ -83,6 +83,15 @@ When reading one of these enable files, there are four results:
X - there is a mixture of events enabled and disabled
? - this file does not affect any event
2.3 Boot option
In order to facilitate early boot debugging, use boot option:
The format of this boot option is the same as described in section 2.1.
3. Defining an event-enabled tracepoint
......@@ -49,7 +49,7 @@ unsigned long __read_mostly tracing_thresh;
* On boot up, the ring buffer is set to the minimum size, so that
* we do not waste memory on systems that are not using tracing.
static int ring_buffer_expanded;
int ring_buffer_expanded;
* We need to change this state when a selftest is running.
......@@ -63,7 +63,7 @@ static bool __read_mostly tracing_selftest_running;
* If a tracer is running, we do not want to run SELFTEST.
static bool __read_mostly tracing_selftest_disabled;
bool __read_mostly tracing_selftest_disabled;
/* For tracers that don't implement custom flags */
static struct tracer_opt dummy_tracer_opt[] = {
......@@ -517,6 +517,9 @@ extern unsigned long ftrace_update_tot_cnt;
extern int DYN_FTRACE_TEST_NAME(void);
extern int ring_buffer_expanded;
extern bool tracing_selftest_disabled;
extern int trace_selftest_startup_function(struct tracer *trace,
struct trace_array *tr);
......@@ -17,6 +17,8 @@
#include <linux/ctype.h>
#include <linux/delay.h>
#include <asm/setup.h>
#include "trace_output.h"
......@@ -1133,6 +1135,18 @@ struct notifier_block trace_module_nb = {
extern struct ftrace_event_call __start_ftrace_events[];
extern struct ftrace_event_call __stop_ftrace_events[];
static char bootup_event_buf[COMMAND_LINE_SIZE] __initdata;
static __init int setup_trace_event(char *str)
strlcpy(bootup_event_buf, str, COMMAND_LINE_SIZE);
ring_buffer_expanded = 1;
tracing_selftest_disabled = 1;
return 1;
__setup("trace_event=", setup_trace_event);
static __init int event_trace_init(void)
struct ftrace_event_call *call;
......@@ -1140,6 +1154,8 @@ static __init int event_trace_init(void)
struct dentry *entry;
struct dentry *d_events;
int ret;
char *buf = bootup_event_buf;
char *token;
d_tracer = tracing_init_dentry();
if (!d_tracer)
......@@ -1185,6 +1201,19 @@ static __init int event_trace_init(void)
while (true) {
token = strsep(&buf, ",");
if (!token)
if (!*token)
ret = ftrace_set_clr_event(token, 1);
if (ret)
pr_warning("Failed to enable trace event: %s\n", token);
ret = register_module_notifier(&trace_module_nb);
if (ret)
pr_warning("Failed to register trace events module notifier\n");
......@@ -1392,10 +1421,10 @@ static __init void event_trace_self_test_with_function(void)
static __init int event_trace_self_tests_init(void)
if (!tracing_selftest_disabled) {
return 0;
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