x86/asm/entry: Move the 'thunk' functions to arch/x86/entry/
authorIngo Molnar <mingo@kernel.org>
Wed, 3 Jun 2015 16:10:43 +0000 (18:10 +0200)
committerIngo Molnar <mingo@kernel.org>
Thu, 4 Jun 2015 05:37:33 +0000 (07:37 +0200)
These are all calling x86 entry code functions, so move them close
to other entry code.

Change lib-y to obj-y: there's no real difference between the two
as we don't really drop any of them during the linking stage, and
obj-y is the more common approach for core kernel object code.

Cc: Borislav Petkov <bp@alien8.de>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/entry/Makefile
arch/x86/entry/thunk_32.S [new file with mode: 0644]
arch/x86/entry/thunk_64.S [new file with mode: 0644]
arch/x86/lib/Makefile
arch/x86/lib/thunk_32.S [deleted file]
arch/x86/lib/thunk_64.S [deleted file]
arch/x86/um/Makefile

index c97532492ef577c0400d26adb5ff1c98fb77af81..9df72c8a0ac24dff7e75759b3c1090be6df18a17 100644 (file)
@@ -1,8 +1,7 @@
 #
 # Makefile for the x86 low level entry code
 #
-obj-y                          := entry_$(BITS).o
-
+obj-y                          := entry_$(BITS).o thunk_$(BITS).o
 obj-y                          += vdso/
 
 obj-$(CONFIG_IA32_EMULATION)   += ia32entry.o
diff --git a/arch/x86/entry/thunk_32.S b/arch/x86/entry/thunk_32.S
new file mode 100644 (file)
index 0000000..e9acf5f
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Trampoline to trace irqs off. (otherwise CALLER_ADDR1 might crash)
+ * Copyright 2008 by Steven Rostedt, Red Hat, Inc
+ *  (inspired by Andi Kleen's thunk_64.S)
+ * Subject to the GNU public license, v.2. No warranty of any kind.
+ */
+       #include <linux/linkage.h>
+       #include <asm/asm.h>
+
+       /* put return address in eax (arg1) */
+       .macro THUNK name, func, put_ret_addr_in_eax=0
+       .globl \name
+\name:
+       pushl %eax
+       pushl %ecx
+       pushl %edx
+
+       .if \put_ret_addr_in_eax
+       /* Place EIP in the arg1 */
+       movl 3*4(%esp), %eax
+       .endif
+
+       call \func
+       popl %edx
+       popl %ecx
+       popl %eax
+       ret
+       _ASM_NOKPROBE(\name)
+       .endm
+
+#ifdef CONFIG_TRACE_IRQFLAGS
+       THUNK trace_hardirqs_on_thunk,trace_hardirqs_on_caller,1
+       THUNK trace_hardirqs_off_thunk,trace_hardirqs_off_caller,1
+#endif
+
+#ifdef CONFIG_PREEMPT
+       THUNK ___preempt_schedule, preempt_schedule
+#ifdef CONFIG_CONTEXT_TRACKING
+       THUNK ___preempt_schedule_context, preempt_schedule_context
+#endif
+#endif
+
diff --git a/arch/x86/entry/thunk_64.S b/arch/x86/entry/thunk_64.S
new file mode 100644 (file)
index 0000000..10f555e
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Save registers before calling assembly functions. This avoids
+ * disturbance of register allocation in some inline assembly constructs.
+ * Copyright 2001,2002 by Andi Kleen, SuSE Labs.
+ * Added trace_hardirqs callers - Copyright 2007 Steven Rostedt, Red Hat, Inc.
+ * Subject to the GNU public license, v.2. No warranty of any kind.
+ */
+#include <linux/linkage.h>
+#include <asm/calling.h>
+#include <asm/asm.h>
+
+       /* rdi: arg1 ... normal C conventions. rax is saved/restored. */
+       .macro THUNK name, func, put_ret_addr_in_rdi=0
+       .globl \name
+\name:
+
+       /* this one pushes 9 elems, the next one would be %rIP */
+       pushq %rdi
+       pushq %rsi
+       pushq %rdx
+       pushq %rcx
+       pushq %rax
+       pushq %r8
+       pushq %r9
+       pushq %r10
+       pushq %r11
+
+       .if \put_ret_addr_in_rdi
+       /* 9*8(%rsp) is return addr on stack */
+       movq 9*8(%rsp), %rdi
+       .endif
+
+       call \func
+       jmp  restore
+       _ASM_NOKPROBE(\name)
+       .endm
+
+#ifdef CONFIG_TRACE_IRQFLAGS
+       THUNK trace_hardirqs_on_thunk,trace_hardirqs_on_caller,1
+       THUNK trace_hardirqs_off_thunk,trace_hardirqs_off_caller,1
+#endif
+
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+       THUNK lockdep_sys_exit_thunk,lockdep_sys_exit
+#endif
+
+#ifdef CONFIG_PREEMPT
+       THUNK ___preempt_schedule, preempt_schedule
+#ifdef CONFIG_CONTEXT_TRACKING
+       THUNK ___preempt_schedule_context, preempt_schedule_context
+#endif
+#endif
+
+#if defined(CONFIG_TRACE_IRQFLAGS) \
+ || defined(CONFIG_DEBUG_LOCK_ALLOC) \
+ || defined(CONFIG_PREEMPT)
+restore:
+       popq %r11
+       popq %r10
+       popq %r9
+       popq %r8
+       popq %rax
+       popq %rcx
+       popq %rdx
+       popq %rsi
+       popq %rdi
+       ret
+       _ASM_NOKPROBE(restore)
+#endif
index 982989d282ff57432a993a00beaab9011987d488..f2587888d987f7ce4f370fd70b4b18461581b19e 100644 (file)
@@ -17,7 +17,6 @@ clean-files := inat-tables.c
 obj-$(CONFIG_SMP) += msr-smp.o cache-smp.o
 
 lib-y := delay.o misc.o cmdline.o
-lib-y += thunk_$(BITS).o
 lib-y += usercopy_$(BITS).o usercopy.o getuser.o putuser.o
 lib-y += memcpy_$(BITS).o
 lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
diff --git a/arch/x86/lib/thunk_32.S b/arch/x86/lib/thunk_32.S
deleted file mode 100644 (file)
index e9acf5f..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Trampoline to trace irqs off. (otherwise CALLER_ADDR1 might crash)
- * Copyright 2008 by Steven Rostedt, Red Hat, Inc
- *  (inspired by Andi Kleen's thunk_64.S)
- * Subject to the GNU public license, v.2. No warranty of any kind.
- */
-       #include <linux/linkage.h>
-       #include <asm/asm.h>
-
-       /* put return address in eax (arg1) */
-       .macro THUNK name, func, put_ret_addr_in_eax=0
-       .globl \name
-\name:
-       pushl %eax
-       pushl %ecx
-       pushl %edx
-
-       .if \put_ret_addr_in_eax
-       /* Place EIP in the arg1 */
-       movl 3*4(%esp), %eax
-       .endif
-
-       call \func
-       popl %edx
-       popl %ecx
-       popl %eax
-       ret
-       _ASM_NOKPROBE(\name)
-       .endm
-
-#ifdef CONFIG_TRACE_IRQFLAGS
-       THUNK trace_hardirqs_on_thunk,trace_hardirqs_on_caller,1
-       THUNK trace_hardirqs_off_thunk,trace_hardirqs_off_caller,1
-#endif
-
-#ifdef CONFIG_PREEMPT
-       THUNK ___preempt_schedule, preempt_schedule
-#ifdef CONFIG_CONTEXT_TRACKING
-       THUNK ___preempt_schedule_context, preempt_schedule_context
-#endif
-#endif
-
diff --git a/arch/x86/lib/thunk_64.S b/arch/x86/lib/thunk_64.S
deleted file mode 100644 (file)
index 10f555e..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Save registers before calling assembly functions. This avoids
- * disturbance of register allocation in some inline assembly constructs.
- * Copyright 2001,2002 by Andi Kleen, SuSE Labs.
- * Added trace_hardirqs callers - Copyright 2007 Steven Rostedt, Red Hat, Inc.
- * Subject to the GNU public license, v.2. No warranty of any kind.
- */
-#include <linux/linkage.h>
-#include <asm/calling.h>
-#include <asm/asm.h>
-
-       /* rdi: arg1 ... normal C conventions. rax is saved/restored. */
-       .macro THUNK name, func, put_ret_addr_in_rdi=0
-       .globl \name
-\name:
-
-       /* this one pushes 9 elems, the next one would be %rIP */
-       pushq %rdi
-       pushq %rsi
-       pushq %rdx
-       pushq %rcx
-       pushq %rax
-       pushq %r8
-       pushq %r9
-       pushq %r10
-       pushq %r11
-
-       .if \put_ret_addr_in_rdi
-       /* 9*8(%rsp) is return addr on stack */
-       movq 9*8(%rsp), %rdi
-       .endif
-
-       call \func
-       jmp  restore
-       _ASM_NOKPROBE(\name)
-       .endm
-
-#ifdef CONFIG_TRACE_IRQFLAGS
-       THUNK trace_hardirqs_on_thunk,trace_hardirqs_on_caller,1
-       THUNK trace_hardirqs_off_thunk,trace_hardirqs_off_caller,1
-#endif
-
-#ifdef CONFIG_DEBUG_LOCK_ALLOC
-       THUNK lockdep_sys_exit_thunk,lockdep_sys_exit
-#endif
-
-#ifdef CONFIG_PREEMPT
-       THUNK ___preempt_schedule, preempt_schedule
-#ifdef CONFIG_CONTEXT_TRACKING
-       THUNK ___preempt_schedule_context, preempt_schedule_context
-#endif
-#endif
-
-#if defined(CONFIG_TRACE_IRQFLAGS) \
- || defined(CONFIG_DEBUG_LOCK_ALLOC) \
- || defined(CONFIG_PREEMPT)
-restore:
-       popq %r11
-       popq %r10
-       popq %r9
-       popq %r8
-       popq %rax
-       popq %rcx
-       popq %rdx
-       popq %rsi
-       popq %rdi
-       ret
-       _ASM_NOKPROBE(restore)
-#endif
index acb384d246694e974d5d722edd96856e2774fc1b..a8fecc226946dc1fb65960f84b26f53fde82f57e 100644 (file)
@@ -26,7 +26,7 @@ else
 
 obj-y += syscalls_64.o vdso/
 
-subarch-y = ../lib/csum-partial_64.o ../lib/memcpy_64.o ../lib/thunk_64.o \
+subarch-y = ../lib/csum-partial_64.o ../lib/memcpy_64.o ../entry/thunk_64.o \
                ../lib/rwsem.o
 
 endif