浏览代码

tracing: Fix preemptirqsoff tracer to not stop at preempt off

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>
Steven Rostedt 13 年之前
父节点
当前提交
e36de1de4a
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      kernel/trace/trace_irqsoff.c

+ 2 - 2
kernel/trace/trace_irqsoff.c

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