From 26ac28ab6e7e4d3716452f5512f785904f1ce5b4 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Mon, 10 Nov 2008 23:07:30 -0500 Subject: [PATCH] --- yaml --- r: 121082 b: refs/heads/master c: 5aa1ba6a6c710e747838a22d798ac97a8b248745 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/trace/trace.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index f4f014988ed7..b1876e21e253 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e0cb4ebcd9e5b4ddd8216c20f54445c91b1fa4b9 +refs/heads/master: 5aa1ba6a6c710e747838a22d798ac97a8b248745 diff --git a/trunk/kernel/trace/trace.c b/trunk/kernel/trace/trace.c index 0c22fe2d43a7..216bbe7547a4 100644 --- a/trunk/kernel/trace/trace.c +++ b/trunk/kernel/trace/trace.c @@ -960,6 +960,7 @@ ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) { struct trace_array *tr = &global_trace; struct trace_array_cpu *data; + unsigned long flags; int cpu; int pc; @@ -967,14 +968,15 @@ ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) return; pc = preempt_count(); - preempt_disable_notrace(); + local_irq_save(flags); cpu = raw_smp_processor_id(); data = tr->data[cpu]; - if (likely(!atomic_read(&data->disabled))) + if (likely(atomic_inc_return(&data->disabled) == 1)) ftrace_trace_special(tr, data, arg1, arg2, arg3, pc); - preempt_enable_notrace(); + atomic_dec(&data->disabled); + local_irq_restore(flags); } #ifdef CONFIG_FUNCTION_TRACER