[S390] ftrace: add function trace mcount test support
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Fri, 12 Jun 2009 08:26:45 +0000 (10:26 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 12 Jun 2009 08:27:38 +0000 (10:27 +0200)
Add support for early test if the function tracer is enabled or
disabled. Saves some extra function calls.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/Kconfig
arch/s390/kernel/mcount.S

index b674e79044a03ec8707ddbdd5a1a1eff0628bedf..480590f2157003746e70b625608c9a8166b3a20a 100644 (file)
@@ -82,6 +82,7 @@ config S390
        select USE_GENERIC_SMP_HELPERS if SMP
        select HAVE_SYSCALL_WRAPPERS
        select HAVE_FUNCTION_TRACER
+       select HAVE_FUNCTION_TRACE_MCOUNT_TEST
        select HAVE_FTRACE_MCOUNT_RECORD
        select HAVE_DYNAMIC_FTRACE
        select HAVE_DEFAULT_NO_SPIN_MUTEXES
index de274996f640ac732613cc6c4107109a81df255d..0aa85ec94d0821ea8ff43e990063d6ec9f423590 100644 (file)
@@ -21,6 +21,9 @@ _mcount:
 
        .globl ftrace_caller
 ftrace_caller:
+       larl    %r1,function_trace_stop
+       icm     %r1,0xf,0(%r1)
+       bnzr    %r14
        stmg    %r2,%r5,32(%r15)
        stg     %r14,112(%r15)
        lgr     %r1,%r15
@@ -46,6 +49,9 @@ ftrace_dyn_func:
 
        .globl _mcount
 _mcount:
+       larl    %r1,function_trace_stop
+       icm     %r1,0xf,0(%r1)
+       bnzr    %r14
        stmg    %r2,%r5,32(%r15)
        stg     %r14,112(%r15)
        lgr     %r1,%r15
@@ -74,21 +80,25 @@ _mcount:
        .globl ftrace_caller
 ftrace_caller:
        stm     %r2,%r5,16(%r15)
+       bras    %r1,2f
+0:     .long   ftrace_trace_function
+1:     .long   function_trace_stop
+2:     l       %r2,1b-0b(%r1)
+       icm     %r2,0xf,0(%r2)
+       jnz     3f
        st      %r14,56(%r15)
-       lr      %r1,%r15
+       lr      %r0,%r15
        ahi     %r15,-96
        l       %r3,100(%r15)
        la      %r2,0(%r14)
-       st      %r1,__SF_BACKCHAIN(%r15)
+       st      %r0,__SF_BACKCHAIN(%r15)
        la      %r3,0(%r3)
-       bras    %r14,0f
-       .long   ftrace_dyn_func
-0:     l       %r14,0(%r14)
+       l       %r14,0b-0b(%r1)
        l       %r14,0(%r14)
        basr    %r14,%r14
        ahi     %r15,96
-       lm      %r2,%r5,16(%r15)
        l       %r14,56(%r15)
+3:     lm      %r2,%r5,16(%r15)
        br      %r14
 
        .data
@@ -102,21 +112,25 @@ ftrace_dyn_func:
        .globl _mcount
 _mcount:
        stm     %r2,%r5,16(%r15)
+       bras    %r1,2f
+0:     .long   ftrace_trace_function
+1:     .long   function_trace_stop
+2:     l       %r2,1b-0b(%r1)
+       icm     %r2,0xf,0(%r2)
+       jnz     3f
        st      %r14,56(%r15)
-       lr      %r1,%r15
+       lr      %r0,%r15
        ahi     %r15,-96
        l       %r3,100(%r15)
        la      %r2,0(%r14)
-       st      %r1,__SF_BACKCHAIN(%r15)
+       st      %r0,__SF_BACKCHAIN(%r15)
        la      %r3,0(%r3)
-       bras    %r14,0f
-       .long   ftrace_trace_function
-0:     l       %r14,0(%r14)
+       l       %r14,0b-0b(%r1)
        l       %r14,0(%r14)
        basr    %r14,%r14
        ahi     %r15,96
-       lm      %r2,%r5,16(%r15)
        l       %r14,56(%r15)
+3:     lm      %r2,%r5,16(%r15)
        br      %r14
 
 #endif /* CONFIG_DYNAMIC_FTRACE */