sh: Define HAVE_FUNCTION_TRACE_MCOUNT_TEST
authorMatt Fleming <matt@console-pimps.org>
Sun, 28 Jun 2009 13:05:44 +0000 (14:05 +0100)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 6 Jul 2009 10:53:53 +0000 (19:53 +0900)
Enable HAVE_FUNCTION_TRACE_MCOUNT_TEST and test the value of
function_trace_stop from our assembly code as opposed to using the
generic C function. This should optimise our mcount/ftrace code path.

Signed-off-by: Matt Fleming <matt@console-pimps.org>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/Kconfig
arch/sh/lib/mcount.S

index e2bdd7b..801a4a7 100644 (file)
@@ -31,6 +31,7 @@ config SUPERH32
        select HAVE_FUNCTION_TRACER
        select HAVE_FTRACE_MCOUNT_RECORD
        select HAVE_DYNAMIC_FTRACE
+       select HAVE_FUNCTION_TRACE_MCOUNT_TEST
        select HAVE_ARCH_KGDB
        select ARCH_HIBERNATION_POSSIBLE if MMU
 
index 110fbfe..cb87ef5 100644 (file)
@@ -2,7 +2,7 @@
  * arch/sh/lib/mcount.S
  *
  *  Copyright (C) 2008  Paul Mundt
- *  Copyright (C) 2008  Matt Fleming
+ *  Copyright (C) 2008, 2009  Matt Fleming
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file "COPYING" in the main directory of this archive
        .type   mcount,@function
 _mcount:
 mcount:
+#ifndef CONFIG_DYNAMIC_FTRACE
+       mov.l   .Lfunction_trace_stop, r0
+       mov.l   @r0, r0
+       tst     r0, r0
+       bf      ftrace_stub
+#endif
        MCOUNT_ENTER()
 
 #ifdef CONFIG_DYNAMIC_FTRACE
@@ -62,6 +68,11 @@ skip_trace:
 #ifdef CONFIG_DYNAMIC_FTRACE
        .globl ftrace_caller
 ftrace_caller:
+       mov.l   .Lfunction_trace_stop, r0
+       mov.l   @r0, r0
+       tst     r0, r0
+       bf      ftrace_stub
+       
        MCOUNT_ENTER()
 
        .globl ftrace_call
@@ -88,3 +99,7 @@ ftrace_call:
 ftrace_stub:
        rts
         nop
+
+       .align 2
+.Lfunction_trace_stop:
+       .long   function_trace_stop