tracing: Minor fixes for 4.14 (and stable)
Subsystems (3)
Steven Rostedt
maintainerLinus,
This includes 3 minor fixes.
- Have writing to trace file clear the irqsoff (and friends) tracer
- trace_pipe behavior for instance buffers was different than top buffer
- Show a message of why mmiotrace doesn't start from commandline
Please pull the latest trace-v4.14-rc1 tree, which can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git
trace-v4.14-rc1
Tag SHA1: cd68d5e5af1d4b58d32f937d7a59d15e88de3e4e Head SHA1: 75df6e688ccd517e339a7c422ef7ad73045b18a2
Bo Yan (1):
tracing: Erase irqsoff trace with empty write
Tahsin Erdogan (1):
tracing: Fix trace_pipe behavior for instance traces
Ziqian SUN (Zamir) (1):
tracing: Ignore mmiotrace from kernel commandline
----
kernel/trace/trace.c | 19 ++++++++++++++++--- kernel/trace/trace.h | 2 ++ kernel/trace/trace_mmiotrace.c | 1 + 3 files changed, 19 insertions(+), 3 deletions(-)
Steven Rostedt
maintainerPATCH 1/3 tracing: Erase irqsoff trace with empty write
From: Bo Yan <[email protected]>
One convenient way to erase trace is "echo > trace". However, this is currently broken if the current tracer is irqsoff tracer. This is because irqsoff tracer use max_buffer as the default trace buffer.
Set the max_buffer as the one to be cleared when it's the trace buffer currently in use.
--- kernel/trace/trace.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
kernel/trace/trace.c +8 -2
@@ -4020,11 +4020,17 @@ static int tracing_open(struct inode *inode, struct file *file)/* If this file was open for write, then erase contents */ if ((file->f_mode &FMODE_WRITE ) && (file->f_flags &O_TRUNC )) {int cpu =tracing_get_cpu (inode); +struct trace_buffer *trace_buf = &tr->trace_buffer; + +#ifdef CONFIG_TRACER_MAX_TRACE +if (tr->current_trace->print_max) + trace_buf = &tr->max_buffer; +#endif if (cpu ==RING_BUFFER_ALL_CPUS ) -tracing_reset_online_cpus (&tr->trace_buffer); +tracing_reset_online_cpus (trace_buf);else -tracing_reset (&tr->trace_buffer, cpu); +tracing_reset (trace_buf, cpu); }if (file->f_mode &FMODE_READ ) {
Signature · 1 line
2.13.2
Steven Rostedt
maintainerPATCH 2/3 tracing: Ignore mmiotrace from kernel commandline
In reply to Steven RostedtFrom: "Ziqian SUN (Zamir)" <[email protected]>
The mmiotrace tracer cannot be enabled with ftrace=mmiotrace in kernel commandline. With this patch, noboot is added to the tracer struct, and when system boot with a tracer that has noboot=true, it will print out a warning message and continue booting.
--- kernel/trace/trace.c | 7 +++++++ kernel/trace/trace.h | 2 ++ kernel/trace/trace_mmiotrace.c | 1 + 3 files changed, 10 insertions(+)
kernel/trace/trace.c +7 -0
@@ -5364,6 +5364,13 @@ static int tracing_set_tracer(struct trace_array *tr, const char *buf)if (t == tr->current_trace) goto out; +/* Some tracers won't work on kernel command line */ +if (system_state <SYSTEM_RUNNING && t->noboot) { +pr_warn ("Tracer '%s' is not allowed on command line, ignored\n" , + t->name); + goto out; + } +/* Some tracers are only allowed for the top level buffer */ if (!trace_ok_for_array (t, tr)) { ret = -EINVAL ;
kernel/trace/trace.h +2 -0
@@ -444,6 +444,8 @@ struct tracer {#ifdef CONFIG_TRACER_MAX_TRACE bool use_max_tr;#endif +/* True if tracer cannot be enabled in kernel param */ +bool noboot; };
kernel/trace/trace_mmiotrace.c +1 -0
@@ -282,6 +282,7 @@ static struct tracer mmio_tracer __read_mostly = .close = mmio_close, .read = mmio_read, .print_line = mmio_print_line, + .noboot = true, };__init static int init_mmio_trace (void )
Signature · 1 line
2.13.2
Steven Rostedt
maintainerPATCH 3/3 tracing: Fix trace_pipe behavior for instance traces
In reply to Steven RostedtFrom: Tahsin Erdogan <[email protected]>
When reading data from trace_pipe, tracing_wait_pipe() performs a check to see if tracing has been turned off after some data was read. Currently, this check always looks at global trace state, but it should be checking the trace instance where trace_pipe is located at.
Because of this bug, cat instances/i1/trace_pipe in the following script will immediately exit instead of waiting for data:
cd /sys/kernel/debug/tracing
echo 0 > tracing_on
mkdir -p instances/i1
echo 1 > instances/i1/tracing_on
echo 1 > instances/i1/events/sched/sched_process_exec/enable cat instances/i1/trace_pipe
--- kernel/trace/trace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/trace/trace.c +1 -1
@@ -5680,7 +5680,7 @@ static int tracing_wait_pipe(struct file *filp)* * iter->pos will be 0 if we haven't read anything. */ -if (!tracing_is_on () && iter->pos) +if (!tracer_tracing_is_on (iter->tr) && iter->pos)break ;mutex_unlock (&iter->mutex);
Signature · 1 line
2.13.2