Skip to content

Commit

Permalink
tracing: Add trace_options kernel command line parameter
Browse files Browse the repository at this point in the history
Add trace_options to the kernel command line parameter to be able to
set options at early boot. For example, to enable stack dumps of
events, add the following:

  trace_options=stacktrace

This along with the trace_event option, you can get not only
traces of the events but also the stack dumps with them.

Requested-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
Steven Rostedt authored and Steven Rostedt committed Nov 2, 2012
1 parent 0d5c6e1 commit 7bcfaf5
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 15 deletions.
16 changes: 16 additions & 0 deletions Documentation/kernel-parameters.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2859,6 +2859,22 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
to facilitate early boot debugging.
See also Documentation/trace/events.txt

trace_options=[option-list]
[FTRACE] Enable or disable tracer options at boot.
The option-list is a comma delimited list of options
that can be enabled or disabled just as if you were
to echo the option name into

/sys/kernel/debug/tracing/trace_options

For example, to enable stacktrace option (to dump the
stack trace of each event), add to the command line:

trace_options=stacktrace

See also Documentation/trace/ftrace.txt "trace options"
section.

transparent_hugepage=
[KNL]
Format: [always|madvise|never]
Expand Down
54 changes: 39 additions & 15 deletions kernel/trace/trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,18 @@ static int __init set_ftrace_dump_on_oops(char *str)
}
__setup("ftrace_dump_on_oops", set_ftrace_dump_on_oops);


static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata;
static char *trace_boot_options __initdata;

static int __init set_trace_boot_options(char *str)
{
strncpy(trace_boot_options_buf, str, MAX_TRACER_SIZE);
trace_boot_options = trace_boot_options_buf;
return 0;
}
__setup("trace_options=", set_trace_boot_options);

unsigned long long ns2usecs(cycle_t nsec)
{
nsec += 500;
Expand Down Expand Up @@ -2838,24 +2850,14 @@ static void set_tracer_flags(unsigned int mask, int enabled)
trace_printk_start_stop_comm(enabled);
}

static ssize_t
tracing_trace_options_write(struct file *filp, const char __user *ubuf,
size_t cnt, loff_t *ppos)
static int trace_set_options(char *option)
{
char buf[64];
char *cmp;
int neg = 0;
int ret;
int ret = 0;
int i;

if (cnt >= sizeof(buf))
return -EINVAL;

if (copy_from_user(&buf, ubuf, cnt))
return -EFAULT;

buf[cnt] = 0;
cmp = strstrip(buf);
cmp = strstrip(option);

if (strncmp(cmp, "no", 2) == 0) {
neg = 1;
Expand All @@ -2874,10 +2876,25 @@ tracing_trace_options_write(struct file *filp, const char __user *ubuf,
mutex_lock(&trace_types_lock);
ret = set_tracer_option(current_trace, cmp, neg);
mutex_unlock(&trace_types_lock);
if (ret)
return ret;
}

return ret;
}

static ssize_t
tracing_trace_options_write(struct file *filp, const char __user *ubuf,
size_t cnt, loff_t *ppos)
{
char buf[64];

if (cnt >= sizeof(buf))
return -EINVAL;

if (copy_from_user(&buf, ubuf, cnt))
return -EFAULT;

trace_set_options(buf);

*ppos += cnt;

return cnt;
Expand Down Expand Up @@ -5133,6 +5150,13 @@ __init static int tracer_alloc_buffers(void)

register_die_notifier(&trace_die_notifier);

while (trace_boot_options) {
char *option;

option = strsep(&trace_boot_options, ",");
trace_set_options(option);
}

return 0;

out_free_cpumask:
Expand Down

0 comments on commit 7bcfaf5

Please sign in to comment.