Borislav Petkov 5efdb6
From: Peter Zijlstra <peterz@infradead.org>
Borislav Petkov 5efdb6
Date: Fri, 6 May 2022 14:14:35 +0200
Borislav Petkov 5efdb6
Subject: x86/entry: Remove skip_r11rcx
Borislav Petkov 5efdb6
Git-commit: 1b331eeea7b8676fc5dbdf80d0a07e41be226177
Borislav Petkov 5efdb6
Patch-mainline: v5.19-rc1
Borislav Petkov 5efdb6
References: bsc#1201644
Borislav Petkov 5efdb6
Borislav Petkov 5efdb6
Yes, r11 and rcx have been restored previously, but since they're being
Borislav Petkov 5efdb6
popped anyway (into rsi) might as well pop them into their own regs --
Borislav Petkov 5efdb6
setting them to the value they already are.
Borislav Petkov 5efdb6
Borislav Petkov 5efdb6
Less magical code.
Borislav Petkov 5efdb6
Borislav Petkov 5efdb6
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Borislav Petkov 5efdb6
Signed-off-by: Borislav Petkov <bp@suse.de>
Borislav Petkov 5efdb6
Link: https://lore.kernel.org/r/20220506121631.365070674@infradead.org
Borislav Petkov 5efdb6
---
Borislav Petkov 5efdb6
 arch/x86/entry/calling.h  |   10 +---------
Borislav Petkov 5efdb6
 arch/x86/entry/entry_64.S |    3 +--
Borislav Petkov 5efdb6
 2 files changed, 2 insertions(+), 11 deletions(-)
Borislav Petkov 5efdb6
Borislav Petkov 5efdb6
--- a/arch/x86/entry/calling.h
Borislav Petkov 5efdb6
+++ b/arch/x86/entry/calling.h
Borislav Petkov 5efdb6
@@ -153,27 +153,19 @@ For 32-bit we have the following convent
Borislav Petkov 5efdb6
 
Borislav Petkov 5efdb6
 .endm
Borislav Petkov 5efdb6
 
Borislav Petkov 5efdb6
-.macro POP_REGS pop_rdi=1 skip_r11rcx=0
Borislav Petkov 5efdb6
+.macro POP_REGS pop_rdi=1
Borislav Petkov 5efdb6
 	popq %r15
Borislav Petkov 5efdb6
 	popq %r14
Borislav Petkov 5efdb6
 	popq %r13
Borislav Petkov 5efdb6
 	popq %r12
Borislav Petkov 5efdb6
 	popq %rbp
Borislav Petkov 5efdb6
 	popq %rbx
Borislav Petkov 5efdb6
-	.if \skip_r11rcx
Borislav Petkov 5efdb6
-	popq %rsi
Borislav Petkov 5efdb6
-	.else
Borislav Petkov 5efdb6
 	popq %r11
Borislav Petkov 5efdb6
-	.endif
Borislav Petkov 5efdb6
 	popq %r10
Borislav Petkov 5efdb6
 	popq %r9
Borislav Petkov 5efdb6
 	popq %r8
Borislav Petkov 5efdb6
 	popq %rax
Borislav Petkov 5efdb6
-	.if \skip_r11rcx
Borislav Petkov 5efdb6
-	popq %rsi
Borislav Petkov 5efdb6
-	.else
Borislav Petkov 5efdb6
 	popq %rcx
Borislav Petkov 5efdb6
-	.endif
Borislav Petkov 5efdb6
 	popq %rdx
Borislav Petkov 5efdb6
 	popq %rsi
Borislav Petkov 5efdb6
 	.if \pop_rdi
Borislav Petkov 5efdb6
--- a/arch/x86/entry/entry_64.S
Borislav Petkov 5efdb6
+++ b/arch/x86/entry/entry_64.S
Borislav Petkov 5efdb6
@@ -299,8 +299,7 @@ GLOBAL(entry_SYSCALL_64_after_hwframe)
Borislav Petkov 5efdb6
 	 * perf profiles. Nothing jumps here.
Borislav Petkov 5efdb6
 	 */
Borislav Petkov 5efdb6
 syscall_return_via_sysret:
Borislav Petkov 5efdb6
-	/* rcx and r11 are already restored (see code above) */
Borislav Petkov 5efdb6
-	POP_REGS pop_rdi=0 skip_r11rcx=1
Borislav Petkov 5efdb6
+	POP_REGS pop_rdi=0
Borislav Petkov 5efdb6
 
Borislav Petkov 5efdb6
 	/*
Borislav Petkov 5efdb6
 	 * Now all regs are restored except RSP and RDI.