Messages in this thread Patch in this message | | | From | Lai Jiangshan <> | Subject | [PATCH 1/5] x86/entry: introduce macro idtentry_swapgs_and_switch_to_kernel_stack | Date | Wed, 27 May 2020 07:31:03 +0000 |
| |
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 <laijs@linux.alibaba.com> --- 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
| |