From: Lai Jiangshan <jiangshan.ljs@xxxxxxxxxxxx> Prepare to call paranoid_entry() with pt_regs pushed. Signed-off-by: Lai Jiangshan <jiangshan.ljs@xxxxxxxxxxxx> --- arch/x86/entry/entry_64.S | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index eccc3431e515..49ddc4dd3117 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -475,11 +475,13 @@ SYM_CODE_START(\asmsym) testb $3, CS-ORIG_RAX(%rsp) jnz .Lfrom_usermode_switch_stack_\@ + PUSH_AND_CLEAR_REGS + UNWIND_HINT_REGS + ENCODE_FRAME_POINTER + /* paranoid_entry returns GS information for paranoid_exit in EBX. */ call paranoid_entry - UNWIND_HINT_REGS - movq %rsp, %rdi /* pt_regs pointer */ call \cfunc @@ -530,14 +532,16 @@ SYM_CODE_START(\asmsym) testb $3, CS-ORIG_RAX(%rsp) jnz .Lfrom_usermode_switch_stack_\@ + PUSH_AND_CLEAR_REGS + UNWIND_HINT_REGS + ENCODE_FRAME_POINTER + /* * paranoid_entry returns SWAPGS flag for paranoid_exit in EBX. * EBX == 0 -> SWAPGS, EBX == 1 -> no SWAPGS */ call paranoid_entry - UNWIND_HINT_REGS - /* * Switch off the IST stack to make it free for nested exceptions. The * vc_switch_off_ist() function will switch back to the interrupted @@ -587,9 +591,12 @@ SYM_CODE_START(\asmsym) ASM_CLAC cld + PUSH_AND_CLEAR_REGS + UNWIND_HINT_REGS + ENCODE_FRAME_POINTER + /* paranoid_entry returns GS information for paranoid_exit in EBX. */ call paranoid_entry - UNWIND_HINT_REGS movq %rsp, %rdi /* pt_regs pointer into first argument */ movq ORIG_RAX(%rsp), %rsi /* get error code into 2nd argument*/ @@ -903,8 +910,8 @@ SYM_CODE_END(xen_failsafe_callback) #endif /* CONFIG_XEN_PV */ /* - * Save all registers in pt_regs. Return GSBASE related information - * in EBX depending on the availability of the FSGSBASE instructions: + * Return GSBASE related information in EBX depending on the availability + * of the FSGSBASE instructions: * * FSGSBASE R/EBX * N 0 -> SWAPGS on exit @@ -915,11 +922,8 @@ SYM_CODE_END(xen_failsafe_callback) * R14 - old CR3 * R15 - old SPEC_CTRL */ -SYM_CODE_START(paranoid_entry) +SYM_FUNC_START(paranoid_entry) ANNOTATE_NOENDBR - UNWIND_HINT_FUNC - PUSH_AND_CLEAR_REGS save_ret=1 - ENCODE_FRAME_POINTER 8 /* * Always stash CR3 in %r14. This value will be restored, @@ -988,7 +992,7 @@ SYM_CODE_START(paranoid_entry) UNTRAIN_RET_FROM_CALL RET -SYM_CODE_END(paranoid_entry) +SYM_FUNC_END(paranoid_entry) /* * "Paranoid" exit path from exception stack. This is invoked @@ -1443,6 +1447,10 @@ end_repeat_nmi: */ pushq $-1 /* ORIG_RAX: no syscall to restart */ + PUSH_AND_CLEAR_REGS + UNWIND_HINT_REGS + ENCODE_FRAME_POINTER + /* * Use paranoid_entry to handle SWAPGS, but no need to use paranoid_exit * as we should not be calling schedule in NMI context. @@ -1451,7 +1459,6 @@ end_repeat_nmi: * exceptions might do. */ call paranoid_entry - UNWIND_HINT_REGS movq %rsp, %rdi movq $-1, %rsi -- 2.19.1.6.gb485710b