tracing: Fix preemptirqsoff tracer to not stop at preempt off
authorSteven Rostedt <srostedt@redhat.com>
Thu, 22 Sep 2011 15:11:51 +0000 (11:11 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Thu, 22 Sep 2011 15:11:51 +0000 (11:11 -0400)
If irqs are disabled when preemption count reaches zero, the
preemptirqsoff tracer should not flag that as the end.

When interrupts are enabled and preemption count is not zero
the preemptirqsoff correctly continues its tracing.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/trace_irqsoff.c

index 667aa8cc0cfcbcc1d3d4a960d03d8e9e15d1d3fc..a1a3359996a7c842ad3d11973d6a6c5ea23b7a1e 100644 (file)
@@ -505,13 +505,13 @@ EXPORT_SYMBOL(trace_hardirqs_off_caller);
 #ifdef CONFIG_PREEMPT_TRACER
 void trace_preempt_on(unsigned long a0, unsigned long a1)
 {
-       if (preempt_trace())
+       if (preempt_trace() && !irq_trace())
                stop_critical_timing(a0, a1);
 }
 
 void trace_preempt_off(unsigned long a0, unsigned long a1)
 {
-       if (preempt_trace())
+       if (preempt_trace() && !irq_trace())
                start_critical_timing(a0, a1);
 }
 #endif /* CONFIG_PREEMPT_TRACER */