x86/entry/64: Merge the fast and slow SYSRET paths
They did almost the same thing. Remove a bunch of pointless instructions (mostly hidden in macros) and reduce cognitive load by merging them. Signed-off-by: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bpetkov@suse.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1204e20233fcab9130a1ba80b3b1879b5db3fc1f.1509609304.git.luto@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
4fbb39108f
commit
a512210643
@ -220,10 +220,9 @@ entry_SYSCALL_64_fastpath:
|
|||||||
TRACE_IRQS_ON /* user mode is traced as IRQs on */
|
TRACE_IRQS_ON /* user mode is traced as IRQs on */
|
||||||
movq RIP(%rsp), %rcx
|
movq RIP(%rsp), %rcx
|
||||||
movq EFLAGS(%rsp), %r11
|
movq EFLAGS(%rsp), %r11
|
||||||
RESTORE_C_REGS_EXCEPT_RCX_R11
|
addq $6*8, %rsp /* skip extra regs -- they were preserved */
|
||||||
movq RSP(%rsp), %rsp
|
|
||||||
UNWIND_HINT_EMPTY
|
UNWIND_HINT_EMPTY
|
||||||
USERGS_SYSRET64
|
jmp .Lpop_c_regs_except_rcx_r11_and_sysret
|
||||||
|
|
||||||
1:
|
1:
|
||||||
/*
|
/*
|
||||||
@ -317,6 +316,7 @@ syscall_return_via_sysret:
|
|||||||
/* rcx and r11 are already restored (see code above) */
|
/* rcx and r11 are already restored (see code above) */
|
||||||
UNWIND_HINT_EMPTY
|
UNWIND_HINT_EMPTY
|
||||||
POP_EXTRA_REGS
|
POP_EXTRA_REGS
|
||||||
|
.Lpop_c_regs_except_rcx_r11_and_sysret:
|
||||||
popq %rsi /* skip r11 */
|
popq %rsi /* skip r11 */
|
||||||
popq %r10
|
popq %r10
|
||||||
popq %r9
|
popq %r9
|
||||||
|
Loading…
Reference in New Issue
Block a user