Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'trace-3.8-rc3-regression-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

Pull tracing regression fixes from Steven Rostedt:
"The clean up patch commit 0fb9656d957d "tracing: Make tracing_enabled
be equal to tracing_on" caused two regressions.

1) The irqs off latency tracer no longer starts if tracing_on is off
when the tracer is set, and then tracing_on is enabled. The
tracing_on file needs the hook that tracing_enabled had to enable
tracers if they request it (call the tracer's start() method).

2) That commit had a separate change that really should have been a
separate patch, but it must have been added accidently with the -a
option of git commit. But as the change is still related to the
commit it wasn't noticed in review. That change, changed the way
blocking is done by the trace_pipe file with respect to the
tracing_on settings. I've been told that this change breaks
current userspace, and this specific change is being reverted."

* tag 'trace-3.8-rc3-regression-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
tracing: Fix regression of trace_pipe
tracing: Fix regression with irqsoff tracer and tracing_on file

+11 -4
+11 -4
kernel/trace/trace.c
··· 3454 3454 return -EINTR; 3455 3455 3456 3456 /* 3457 - * We block until we read something and tracing is enabled. 3457 + * We block until we read something and tracing is disabled. 3458 3458 * We still block if tracing is disabled, but we have never 3459 3459 * read anything. This allows a user to cat this file, and 3460 3460 * then enable tracing. But after we have read something, ··· 3462 3462 * 3463 3463 * iter->pos will be 0 if we haven't read anything. 3464 3464 */ 3465 - if (tracing_is_enabled() && iter->pos) 3465 + if (!tracing_is_enabled() && iter->pos) 3466 3466 break; 3467 3467 } 3468 3468 ··· 4817 4817 return ret; 4818 4818 4819 4819 if (buffer) { 4820 - if (val) 4820 + mutex_lock(&trace_types_lock); 4821 + if (val) { 4821 4822 ring_buffer_record_on(buffer); 4822 - else 4823 + if (current_trace->start) 4824 + current_trace->start(tr); 4825 + } else { 4823 4826 ring_buffer_record_off(buffer); 4827 + if (current_trace->stop) 4828 + current_trace->stop(tr); 4829 + } 4830 + mutex_unlock(&trace_types_lock); 4824 4831 } 4825 4832 4826 4833 (*ppos)++;