tracing: Use flag buffer_disabled for irqsoff tracer
If the ring buffer is disabled and the irqsoff tracer records a trace it will clear out its buffer and lose the data it had previously recorded. Currently there's a callback when writing to the tracing_of file, but if tracing is disabled via the function tracer trigger, it will not inform the irqsoff tracer to stop recording. By using the "mirror" flag (buffer_disabled) in the trace_array, that keeps track of the status of the trace_array's buffer, it gives the irqsoff tracer a fast way to know if it should record a new trace or not. The flag may be a little behind the real state of the buffer, but it should not affect the trace too much. It's more important for the irqsoff tracer to be fast. Reported-by: Dave Jones <davej@redhat.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
b04d52e368
commit
10246fa35d
2 changed files with 72 additions and 33 deletions
|
@ -373,7 +373,7 @@ start_critical_timing(unsigned long ip, unsigned long parent_ip)
|
|||
struct trace_array_cpu *data;
|
||||
unsigned long flags;
|
||||
|
||||
if (likely(!tracer_enabled))
|
||||
if (!tracer_enabled || !tracing_is_enabled())
|
||||
return;
|
||||
|
||||
cpu = raw_smp_processor_id();
|
||||
|
@ -416,7 +416,7 @@ stop_critical_timing(unsigned long ip, unsigned long parent_ip)
|
|||
else
|
||||
return;
|
||||
|
||||
if (!tracer_enabled)
|
||||
if (!tracer_enabled || !tracing_is_enabled())
|
||||
return;
|
||||
|
||||
data = per_cpu_ptr(tr->trace_buffer.data, cpu);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue