mirror of https://gitee.com/openkylin/linux.git
x86/asm/entry/64: Simplify optimistic SYSRET
Avoid redundant load of %r11 (it is already loaded a few instructions before). Also simplify %rsp restoration, instead of two steps: add $0x80, %rsp mov 0x18(%rsp), %rsp we can do a simplified single step to restore user-space RSP: mov 0x98(%rsp), %rsp and get the same result. Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com> Signed-off-by: Andy Lutomirski <luto@amacapital.net> [ Clarified the changelog. ] Cc: Alexei Starovoitov <ast@plumgrid.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Kees Cook <keescook@chromium.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Will Drewry <wad@chromium.org> Link: http://lkml.kernel.org/r/1aef69b346a6db0d99cdfb0f5ba83e8c985e27d7.1424989793.git.luto@amacapital.net Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
b3ab90b333
commit
d441c1f2b7
|
@ -176,6 +176,9 @@ For 32-bit we have the following conventions - kernel is built with
|
||||||
.macro RESTORE_C_REGS_EXCEPT_RCX
|
.macro RESTORE_C_REGS_EXCEPT_RCX
|
||||||
RESTORE_C_REGS_HELPER 1,0,1,1,1
|
RESTORE_C_REGS_HELPER 1,0,1,1,1
|
||||||
.endm
|
.endm
|
||||||
|
.macro RESTORE_C_REGS_EXCEPT_R11
|
||||||
|
RESTORE_C_REGS_HELPER 1,1,0,1,1
|
||||||
|
.endm
|
||||||
.macro RESTORE_RSI_RDI
|
.macro RESTORE_RSI_RDI
|
||||||
RESTORE_C_REGS_HELPER 0,0,0,0,0
|
RESTORE_C_REGS_HELPER 0,0,0,0,0
|
||||||
.endm
|
.endm
|
||||||
|
|
|
@ -757,9 +757,9 @@ retint_swapgs: /* return to user-space */
|
||||||
*/
|
*/
|
||||||
irq_return_via_sysret:
|
irq_return_via_sysret:
|
||||||
CFI_REMEMBER_STATE
|
CFI_REMEMBER_STATE
|
||||||
RESTORE_C_REGS
|
/* r11 is already restored (see code above) */
|
||||||
REMOVE_PT_GPREGS_FROM_STACK 8
|
RESTORE_C_REGS_EXCEPT_R11
|
||||||
movq (RSP-RIP)(%rsp),%rsp
|
movq RSP(%rsp),%rsp
|
||||||
USERGS_SYSRET64
|
USERGS_SYSRET64
|
||||||
CFI_RESTORE_STATE
|
CFI_RESTORE_STATE
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue