From: Ard Biesheuvel <ardb@kernel.org>
To: linux-efi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Ard Biesheuvel <ardb@kernel.org>,
Evgeniy Baskov <baskov@ispras.ru>, Borislav Petkov <bp@alien8.de>,
Andy Lutomirski <luto@kernel.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
Alexey Khoroshilov <khoroshilov@ispras.ru>,
Peter Jones <pjones@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>, Dave Young <dyoung@redhat.com>,
Mario Limonciello <mario.limonciello@amd.com>,
Kees Cook <keescook@chromium.org>,
Tom Lendacky <thomas.lendacky@amd.com>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: [PATCH v3 18/21] x86/head_64: Store boot_params pointer in callee-preserved register
Date: Mon, 22 May 2023 09:14:12 +0200 [thread overview]
Message-ID: <20230522071415.501717-19-ardb@kernel.org> (raw)
In-Reply-To: <20230522071415.501717-1-ardb@kernel.org>
Instead of pushing/popping %RSI to/from the stack every time a function
is called from startup_64(), store it in a callee preserved register
and grab it from there when its value is actualled needed.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
arch/x86/kernel/head_64.S | 15 +++------------
1 file changed, 3 insertions(+), 12 deletions(-)
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index a5df3e994f04f10f..95b12fdae10e1dc9 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -60,6 +60,7 @@ SYM_CODE_START_NOALIGN(startup_64)
* compiled to run at we first fixup the physical addresses in our page
* tables and then reload them.
*/
+ mov %rsi, %r15 /* Preserve boot_params pointer */
/* Set up the stack for verify_cpu() */
leaq (__end_init_task - PTREGS_SIZE)(%rip), %rsp
@@ -73,9 +74,7 @@ SYM_CODE_START_NOALIGN(startup_64)
shrq $32, %rdx
wrmsr
- pushq %rsi
call startup_64_setup_env
- popq %rsi
#ifdef CONFIG_AMD_MEM_ENCRYPT
/*
@@ -84,10 +83,8 @@ SYM_CODE_START_NOALIGN(startup_64)
* which needs to be done before any CPUID instructions are executed in
* subsequent code.
*/
- movq %rsi, %rdi
- pushq %rsi
+ movq %r15, %rdi
call sme_enable
- popq %rsi
#endif
/* Now switch to __KERNEL_CS so IRET works reliably */
@@ -109,9 +106,7 @@ SYM_CODE_START_NOALIGN(startup_64)
* programmed into CR3.
*/
leaq _text(%rip), %rdi
- pushq %rsi
call __startup_64
- popq %rsi
/* Form the CR3 value being sure to include the CR3 modifier */
addq $(early_top_pgt - __START_KERNEL_map), %rax
@@ -200,10 +195,8 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
* %rsi carries pointer to realmode data and is callee-clobbered. Save
* and restore it.
*/
- pushq %rsi
movq %rax, %rdi
call sev_verify_cbit
- popq %rsi
/*
* Switch to new page-table
@@ -294,9 +287,7 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
wrmsr
/* Setup and Load IDT */
- pushq %rsi
call early_setup_idt
- popq %rsi
/* Check if nx is implemented */
movl $0x80000001, %eax
@@ -334,7 +325,7 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
/* rsi is pointer to real mode structure with interesting info.
pass it to C */
- movq %rsi, %rdi
+ movq %r15, %rdi
.Ljump_to_C_code:
/*
--
2.39.2
next prev parent reply other threads:[~2023-05-22 7:17 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-22 7:13 [PATCH v3 00/21] efi/x86: Avoid bare metal decompressor during EFI boot Ard Biesheuvel
2023-05-22 7:13 ` [PATCH v3 01/21] x86/efistub: Branch straight to kernel entry point from C code Ard Biesheuvel
2023-05-22 7:13 ` [PATCH v3 02/21] x86/efistub: Simplify and clean up handover entry code Ard Biesheuvel
2023-05-22 7:13 ` [PATCH v3 03/21] x86/decompressor: Avoid magic offsets for EFI handover entrypoint Ard Biesheuvel
2023-05-22 7:13 ` [PATCH v3 04/21] x86/efistub: Clear BSS in EFI handover protocol entrypoint Ard Biesheuvel
2023-05-22 7:13 ` [PATCH v3 05/21] x86/decompressor: Use proper sequence to take the address of the GOT Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 06/21] x86/decompressor: Store boot_params pointer in callee save register Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 07/21] x86/decompressor: Call trampoline as a normal function Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 08/21] x86/decompressor: Use standard calling convention for trampoline Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 09/21] x86/decompressor: Avoid the need for a stack in the 32-bit trampoline Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 10/21] x86/decompressor: Call trampoline directly from C code Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 11/21] x86/decompressor: Only call the trampoline when changing paging levels Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 12/21] x86/decompressor: Merge trampoline cleanup with switching code Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 13/21] x86/efistub: Perform 4/5 level paging switch from the stub Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 14/21] x86/efistub: Prefer EFI memory attributes protocol over DXE services Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 15/21] decompress: Use 8 byte alignment Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 16/21] x86/decompressor: Move global symbol references to C code Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 17/21] x86/decompressor: Factor out kernel decompression and relocation Ard Biesheuvel
2023-05-22 7:14 ` Ard Biesheuvel [this message]
2023-05-22 7:14 ` [PATCH v3 19/21] efi/libstub: Add limit argument to efi_random_alloc() Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 20/21] x86/efistub: Check SEV/SNP support while running in the firmware Ard Biesheuvel
2023-05-23 10:06 ` [PATCH v3a " Ard Biesheuvel
2023-05-22 7:14 ` [PATCH v3 21/21] x86/efistub: Avoid legacy decompressor when doing EFI boot Ard Biesheuvel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230522071415.501717-19-ardb@kernel.org \
--to=ardb@kernel.org \
--cc=baskov@ispras.ru \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=dyoung@redhat.com \
--cc=keescook@chromium.org \
--cc=khoroshilov@ispras.ru \
--cc=kirill.shutemov@linux.intel.com \
--cc=kraxel@redhat.com \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mario.limonciello@amd.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=pjones@redhat.com \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.