aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/lib/thunk_32.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/lib/thunk_32.S')
-rw-r--r--arch/x86/lib/thunk_32.S20
1 files changed, 16 insertions, 4 deletions
diff --git a/arch/x86/lib/thunk_32.S b/arch/x86/lib/thunk_32.S
index 28f85c916712..e9acf5f4fc92 100644
--- a/arch/x86/lib/thunk_32.S
+++ b/arch/x86/lib/thunk_32.S
@@ -7,16 +7,19 @@
7 #include <linux/linkage.h> 7 #include <linux/linkage.h>
8 #include <asm/asm.h> 8 #include <asm/asm.h>
9 9
10#ifdef CONFIG_TRACE_IRQFLAGS
11 /* put return address in eax (arg1) */ 10 /* put return address in eax (arg1) */
12 .macro thunk_ra name,func 11 .macro THUNK name, func, put_ret_addr_in_eax=0
13 .globl \name 12 .globl \name
14\name: 13\name:
15 pushl %eax 14 pushl %eax
16 pushl %ecx 15 pushl %ecx
17 pushl %edx 16 pushl %edx
17
18 .if \put_ret_addr_in_eax
18 /* Place EIP in the arg1 */ 19 /* Place EIP in the arg1 */
19 movl 3*4(%esp), %eax 20 movl 3*4(%esp), %eax
21 .endif
22
20 call \func 23 call \func
21 popl %edx 24 popl %edx
22 popl %ecx 25 popl %ecx
@@ -25,6 +28,15 @@
25 _ASM_NOKPROBE(\name) 28 _ASM_NOKPROBE(\name)
26 .endm 29 .endm
27 30
28 thunk_ra trace_hardirqs_on_thunk,trace_hardirqs_on_caller 31#ifdef CONFIG_TRACE_IRQFLAGS
29 thunk_ra trace_hardirqs_off_thunk,trace_hardirqs_off_caller 32 THUNK trace_hardirqs_on_thunk,trace_hardirqs_on_caller,1
33 THUNK trace_hardirqs_off_thunk,trace_hardirqs_off_caller,1
34#endif
35
36#ifdef CONFIG_PREEMPT
37 THUNK ___preempt_schedule, preempt_schedule
38#ifdef CONFIG_CONTEXT_TRACKING
39 THUNK ___preempt_schedule_context, preempt_schedule_context
30#endif 40#endif
41#endif
42