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: Li Zefan <lizf@cn.fujitsu.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <4A4ACE29.3010407@cn.fujitsu.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
c5cb5a2d8d
commit
020e5f85cb
|
@ -2478,6 +2478,11 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
trace_buf_size=nn[KMG]
|
trace_buf_size=nn[KMG]
|
||||||
[FTRACE] will set tracing buffer size.
|
[FTRACE] will set tracing buffer size.
|
||||||
|
|
||||||
|
trace_event=[event-list]
|
||||||
|
[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
|
trix= [HW,OSS] MediaTrix AudioTrix Pro
|
||||||
Format:
|
Format:
|
||||||
<io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
|
<io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
|
||||||
|
|
|
@ -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
|
X - there is a mixture of events enabled and disabled
|
||||||
? - this file does not affect any event
|
? - this file does not affect any event
|
||||||
|
|
||||||
|
2.3 Boot option
|
||||||
|
---------------
|
||||||
|
|
||||||
|
In order to facilitate early boot debugging, use boot option:
|
||||||
|
|
||||||
|
trace_event=[event-list]
|
||||||
|
|
||||||
|
The format of this boot option is the same as described in section 2.1.
|
||||||
|
|
||||||
3. Defining an event-enabled tracepoint
|
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
|
* 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.
|
* 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.
|
* 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.
|
* 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 */
|
/* For tracers that don't implement custom flags */
|
||||||
static struct tracer_opt dummy_tracer_opt[] = {
|
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 DYN_FTRACE_TEST_NAME(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern int ring_buffer_expanded;
|
||||||
|
extern bool tracing_selftest_disabled;
|
||||||
|
|
||||||
#ifdef CONFIG_FTRACE_STARTUP_TEST
|
#ifdef CONFIG_FTRACE_STARTUP_TEST
|
||||||
extern int trace_selftest_startup_function(struct tracer *trace,
|
extern int trace_selftest_startup_function(struct tracer *trace,
|
||||||
struct trace_array *tr);
|
struct trace_array *tr);
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
|
||||||
|
#include <asm/setup.h>
|
||||||
|
|
||||||
#include "trace_output.h"
|
#include "trace_output.h"
|
||||||
|
|
||||||
#define TRACE_SYSTEM "TRACE_SYSTEM"
|
#define TRACE_SYSTEM "TRACE_SYSTEM"
|
||||||
|
@ -1133,6 +1135,18 @@ struct notifier_block trace_module_nb = {
|
||||||
extern struct ftrace_event_call __start_ftrace_events[];
|
extern struct ftrace_event_call __start_ftrace_events[];
|
||||||
extern struct ftrace_event_call __stop_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)
|
static __init int event_trace_init(void)
|
||||||
{
|
{
|
||||||
struct ftrace_event_call *call;
|
struct ftrace_event_call *call;
|
||||||
|
@ -1140,6 +1154,8 @@ static __init int event_trace_init(void)
|
||||||
struct dentry *entry;
|
struct dentry *entry;
|
||||||
struct dentry *d_events;
|
struct dentry *d_events;
|
||||||
int ret;
|
int ret;
|
||||||
|
char *buf = bootup_event_buf;
|
||||||
|
char *token;
|
||||||
|
|
||||||
d_tracer = tracing_init_dentry();
|
d_tracer = tracing_init_dentry();
|
||||||
if (!d_tracer)
|
if (!d_tracer)
|
||||||
|
@ -1185,6 +1201,19 @@ static __init int event_trace_init(void)
|
||||||
&ftrace_event_format_fops);
|
&ftrace_event_format_fops);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
token = strsep(&buf, ",");
|
||||||
|
|
||||||
|
if (!token)
|
||||||
|
break;
|
||||||
|
if (!*token)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
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);
|
ret = register_module_notifier(&trace_module_nb);
|
||||||
if (ret)
|
if (ret)
|
||||||
pr_warning("Failed to register trace events module notifier\n");
|
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)
|
static __init int event_trace_self_tests_init(void)
|
||||||
{
|
{
|
||||||
|
if (!tracing_selftest_disabled) {
|
||||||
event_trace_self_tests();
|
event_trace_self_tests();
|
||||||
|
event_trace_self_test_with_function();
|
||||||
event_trace_self_test_with_function();
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue