ftrace: nmi safe code modification
[safe/jmp/linux-2.6] / arch / x86 / include / asm / ftrace.h
1 #ifndef _ASM_X86_FTRACE_H
2 #define _ASM_X86_FTRACE_H
3
4 #ifdef CONFIG_FUNCTION_TRACER
5 #define MCOUNT_ADDR             ((long)(mcount))
6 #define MCOUNT_INSN_SIZE        5 /* sizeof mcount call */
7
8 #ifndef __ASSEMBLY__
9 extern void mcount(void);
10
11 static inline unsigned long ftrace_call_adjust(unsigned long addr)
12 {
13         /*
14          * call mcount is "e8 <4 byte offset>"
15          * The addr points to the 4 byte offset and the caller of this
16          * function wants the pointer to e8. Simply subtract one.
17          */
18         return addr - 1;
19 }
20
21 #ifdef CONFIG_DYNAMIC_FTRACE
22 extern void ftrace_nmi_enter(void);
23 extern void ftrace_nmi_exit(void);
24 #else
25 #define ftrace_nmi_enter()      do { } while (0)
26 #define ftrace_nmi_exit()       do { } while (0)
27 #endif
28 #endif
29
30 #else /* CONFIG_FUNCTION_TRACER */
31
32 #ifndef __ASSEMBLY__
33 #define ftrace_nmi_enter()      do { } while (0)
34 #define ftrace_nmi_exit()       do { } while (0)
35 #endif
36
37 #endif /* CONFIG_FUNCTION_TRACER */
38
39 #endif /* _ASM_X86_FTRACE_H */