Move a portion of code to be a macro, and it will also be used in
next patch.

Just move around the code, no functionality changed.

Signed-off-by: Lai Jiangshan <[email protected]>
---
 arch/x86/entry/entry_64.S | 60 ++++++++++++++++++++++++++-------------
 1 file changed, 41 insertions(+), 19 deletions(-)

diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
index d983a0d4bc73..5e983506f82e 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -698,28 +698,22 @@ SYM_CODE_END(\asmsym)
 #include <asm/idtentry.h>
 
 /*
- * Interrupt entry helper function.
+ * IDT entry helper macro for entering from userspace.
  *
  * Entry runs with interrupts off. Stack layout at entry:
- * +----------------------------------------------------+
- * | regs->ss                                          |
- * | regs->rsp                                         |
- * | regs->eflags                                      |
- * | regs->cs                                          |
- * | regs->ip                                          |
- * +----------------------------------------------------+
- * | regs->orig_ax = ~(interrupt number)               |
- * +----------------------------------------------------+
- * | return address                                    |
- * +----------------------------------------------------+
+ * +--------------------+
+ * | regs->ss          |
+ * | regs->rsp         |
+ * | regs->eflags      |
+ * | regs->cs          |
+ * | regs->ip          |
+ * | regs->orig_ax     |
+ * | return address    |
+ * +--------------------+
+ * The macro does swapgs and switches to current kernel stack with the
+ * same stack layout copied.
  */
-SYM_CODE_START(interrupt_entry)
-       UNWIND_HINT_IRET_REGS offset=16
-       ASM_CLAC
-       cld
-
-       testb   $3, CS-ORIG_RAX+8(%rsp)
-       jz      1f
+.macro idtentry_swapgs_and_switch_to_kernel_stack
        SWAPGS
        FENCE_SWAPGS_USER_ENTRY
        /*
@@ -751,6 +745,34 @@ SYM_CODE_START(interrupt_entry)
        pushq   8(%rdi)                 /* return address */
 
        movq    (%rdi), %rdi
+.endm
+
+/*
+ * Interrupt entry helper function.
+ *
+ * Entry runs with interrupts off. Stack layout at entry:
+ * +----------------------------------------------------+
+ * | regs->ss                                          |
+ * | regs->rsp                                         |
+ * | regs->eflags                                      |
+ * | regs->cs                                          |
+ * | regs->ip                                          |
+ * +----------------------------------------------------+
+ * | regs->orig_ax = ~(interrupt number)               |
+ * +----------------------------------------------------+
+ * | return address                                    |
+ * +----------------------------------------------------+
+ */
+SYM_CODE_START(interrupt_entry)
+       UNWIND_HINT_IRET_REGS offset=16
+       ASM_CLAC
+       cld
+
+       testb   $3, CS-ORIG_RAX+8(%rsp)
+       jz      1f
+
+       idtentry_swapgs_and_switch_to_kernel_stack
+
        jmp     2f
 1:
        FENCE_SWAPGS_KERNEL_ENTRY
-- 
2.20.1

Reply via email to