aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-02-06 01:14:26 -0500
committerSteven Rostedt <srostedt@redhat.com>2009-02-07 20:02:55 -0500
commit9a5fd902273d01170fd033691bd70b142baa7309 (patch)
treef3364fa8917db8eadc5235f77b5245081c0cc028
parent375b38b4214f29109a393ab762d468054bf52354 (diff)
ftrace: change function graph tracer to use new in_nmi
The function graph tracer piggy backed onto the dynamic ftracer to use the in_nmi custom code for dynamic tracing. The problem was (as Andrew Morton pointed out) it really only wanted to bail out if the context of the current CPU was in NMI context. But the dynamic ftrace in_nmi custom code was true if _any_ CPU happened to be in NMI context. Now that we have a generic in_nmi interface, this patch changes the function graph code to use it instead of the dynamic ftarce custom code. Reported-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Steven Rostedt <srostedt@redhat.com>
-rw-r--r--arch/x86/Kconfig2
-rw-r--r--arch/x86/kernel/ftrace.c21
2 files changed, 2 insertions, 21 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index a6be725cb049..2cf7bbcaed4e 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -34,7 +34,7 @@ config X86
34 select HAVE_FUNCTION_TRACER 34 select HAVE_FUNCTION_TRACER
35 select HAVE_FUNCTION_GRAPH_TRACER 35 select HAVE_FUNCTION_GRAPH_TRACER
36 select HAVE_FUNCTION_TRACE_MCOUNT_TEST 36 select HAVE_FUNCTION_TRACE_MCOUNT_TEST
37 select HAVE_FTRACE_NMI_ENTER if DYNAMIC_FTRACE || FUNCTION_GRAPH_TRACER 37 select HAVE_FTRACE_NMI_ENTER if DYNAMIC_FTRACE
38 select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64) 38 select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64)
39 select HAVE_ARCH_KGDB if !X86_VOYAGER 39 select HAVE_ARCH_KGDB if !X86_VOYAGER
40 select HAVE_ARCH_TRACEHOOK 40 select HAVE_ARCH_TRACEHOOK
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index e3fad2ef622c..918073c6681b 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -367,25 +367,6 @@ int ftrace_disable_ftrace_graph_caller(void)
367 return ftrace_mod_jmp(ip, old_offset, new_offset); 367 return ftrace_mod_jmp(ip, old_offset, new_offset);
368} 368}
369 369
370#else /* CONFIG_DYNAMIC_FTRACE */
371
372/*
373 * These functions are picked from those used on
374 * this page for dynamic ftrace. They have been
375 * simplified to ignore all traces in NMI context.
376 */
377static atomic_t nmi_running;
378
379void arch_ftrace_nmi_enter(void)
380{
381 atomic_inc(&nmi_running);
382}
383
384void arch_ftrace_nmi_exit(void)
385{
386 atomic_dec(&nmi_running);
387}
388
389#endif /* !CONFIG_DYNAMIC_FTRACE */ 370#endif /* !CONFIG_DYNAMIC_FTRACE */
390 371
391/* Add a function return address to the trace stack on thread info.*/ 372/* Add a function return address to the trace stack on thread info.*/
@@ -475,7 +456,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
475 &return_to_handler; 456 &return_to_handler;
476 457
477 /* Nmi's are currently unsupported */ 458 /* Nmi's are currently unsupported */
478 if (unlikely(atomic_read(&nmi_running))) 459 if (unlikely(in_nmi()))
479 return; 460 return;
480 461
481 if (unlikely(atomic_read(&current->tracing_graph_pause))) 462 if (unlikely(atomic_read(&current->tracing_graph_pause)))