]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/x86/kernel/entry_32.S
Merge branch 'linus' into tracing/ftrace
[linux-2.6-omap-h63xx.git] / arch / x86 / kernel / entry_32.S
index f47b9b5440d2e158b4736e28b3285c550b677577..95e6bbe3665e1c240daa0400618a7d00c63af5a3 100644 (file)
@@ -51,6 +51,7 @@
 #include <asm/percpu.h>
 #include <asm/dwarf2.h>
 #include <asm/processor-flags.h>
+#include <asm/ftrace.h>
 #include "irq_vectors.h"
 
 /*
@@ -248,6 +249,7 @@ ENTRY(resume_userspace)
        DISABLE_INTERRUPTS(CLBR_ANY)    # make sure we don't miss an interrupt
                                        # setting need_resched or sigpending
                                        # between sampling and the iret
+       TRACE_IRQS_OFF
        movl TI_flags(%ebp), %ecx
        andl $_TIF_WORK_MASK, %ecx      # is there any work to be done on
                                        # int/exception return?
@@ -1110,10 +1112,52 @@ ENDPROC(xen_failsafe_callback)
 #endif /* CONFIG_XEN */
 
 #ifdef CONFIG_FTRACE
+#ifdef CONFIG_DYNAMIC_FTRACE
+
+ENTRY(mcount)
+       pushl %eax
+       pushl %ecx
+       pushl %edx
+       movl 0xc(%esp), %eax
+       subl $MCOUNT_INSN_SIZE, %eax
+
+.globl mcount_call
+mcount_call:
+       call ftrace_stub
+
+       popl %edx
+       popl %ecx
+       popl %eax
+
+       ret
+END(mcount)
+
+ENTRY(ftrace_caller)
+       pushl %eax
+       pushl %ecx
+       pushl %edx
+       movl 0xc(%esp), %eax
+       movl 0x4(%ebp), %edx
+       subl $MCOUNT_INSN_SIZE, %eax
+
+.globl ftrace_call
+ftrace_call:
+       call ftrace_stub
+
+       popl %edx
+       popl %ecx
+       popl %eax
+
+.globl ftrace_stub
+ftrace_stub:
+       ret
+END(ftrace_caller)
+
+#else /* ! CONFIG_DYNAMIC_FTRACE */
+
 ENTRY(mcount)
        cmpl $ftrace_stub, ftrace_trace_function
        jnz trace
-
 .globl ftrace_stub
 ftrace_stub:
        ret
@@ -1125,8 +1169,9 @@ trace:
        pushl %edx
        movl 0xc(%esp), %eax
        movl 0x4(%ebp), %edx
+       subl $MCOUNT_INSN_SIZE, %eax
 
-       call   *ftrace_trace_function
+       call *ftrace_trace_function
 
        popl %edx
        popl %ecx
@@ -1134,7 +1179,8 @@ trace:
 
        jmp ftrace_stub
 END(mcount)
-#endif
+#endif /* CONFIG_DYNAMIC_FTRACE */
+#endif /* CONFIG_FTRACE */
 
 .section .rodata,"a"
 #include "syscall_table_32.S"