diff options
author | Steven Rostedt <rostedt@goodmis.org> | 2016-07-06 15:25:08 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2016-11-15 15:13:59 -0500 |
commit | fa32e8557b470f5ff90babc6cbacc61535a81a0f (patch) | |
tree | fa3fdc74436987c4832e2941659efa1b6f22d874 /kernel/trace/trace_output.c | |
parent | 9648dc15772d77b5431cd5c11675d90eee1a4c2f (diff) | |
download | linux-stable-fa32e8557b470f5ff90babc6cbacc61535a81a0f.tar.gz linux-stable-fa32e8557b470f5ff90babc6cbacc61535a81a0f.tar.bz2 linux-stable-fa32e8557b470f5ff90babc6cbacc61535a81a0f.zip |
tracing: Add new trace_marker_raw
A new file is created:
/sys/kernel/debug/tracing/trace_marker_raw
This allows for appications to create data structures and write the binary
data directly into it, and then read the trace data out from trace_pipe_raw
into the same type of data structure. This saves on converting numbers into
ASCII that would be required by trace_marker.
Suggested-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace_output.c')
-rw-r--r-- | kernel/trace/trace_output.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index 3fc20422c166..5d33a7352919 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c @@ -1288,6 +1288,35 @@ static struct trace_event trace_print_event = { .funcs = &trace_print_funcs, }; +static enum print_line_t trace_raw_data(struct trace_iterator *iter, int flags, + struct trace_event *event) +{ + struct raw_data_entry *field; + int i; + + trace_assign_type(field, iter->ent); + + trace_seq_printf(&iter->seq, "# %x buf:", field->id); + + for (i = 0; i < iter->ent_size - offsetof(struct raw_data_entry, buf); i++) + trace_seq_printf(&iter->seq, " %02x", + (unsigned char)field->buf[i]); + + trace_seq_putc(&iter->seq, '\n'); + + return trace_handle_return(&iter->seq); +} + +static struct trace_event_functions trace_raw_data_funcs = { + .trace = trace_raw_data, + .raw = trace_raw_data, +}; + +static struct trace_event trace_raw_data_event = { + .type = TRACE_RAW_DATA, + .funcs = &trace_raw_data_funcs, +}; + static struct trace_event *events[] __initdata = { &trace_fn_event, @@ -1299,6 +1328,7 @@ static struct trace_event *events[] __initdata = { &trace_bprint_event, &trace_print_event, &trace_hwlat_event, + &trace_raw_data_event, NULL }; |