* Ard Biesheuvel <ardb@xxxxxxxxxx> wrote: > On Mon, 10 Feb 2025 at 18:50, Ard Biesheuvel <ardb+git@xxxxxxxxxx> wrote: > > > > From: Ard Biesheuvel <ardb@xxxxxxxxxx> > > > > Since commit > > > > a1b87d54f4e4 ("x86/efistub: Avoid legacy decompressor when doing EFI boot") > > > > booting via the EFI stub no longer relies on the legacy decompressor, > > and instead, the kernel proper is decompressed by code executing in the > > context of the EFI boot services, and subsequently invoked directly. > > > > The only remaining dependency is the EFI mixed mode startup code, which > > makes a detour via the legacy decompressor's 32-bit entrypoint, in order > > to obtain a 1:1 mapping of memory, which is a prerequisite for 64-bit > > execution on x86. > > > > This detour requires some fiddly setup on the part of the mixed mode > > startup code, which has to stash the firmware stack pointer and boot > > arguments in memory, and create a fake struct boot_params to trick the > > code in startup_32 to behave as intended. > > > > This dependency also impedes reuse of the EFI stub code in other > > contexts, such as generic EFI zboot, which will reuse the EFI stub but > > not the legacy decompressor. > > > > So remove this dependency, by replacing this detour with a minimal > > reimplementation of the 1:1 mapping code. With some further cleanup > > applied on top, the line count drops substantially, but without loss of > > functionality. The resulting code can operate independently from the > > legacy decompressor, and is therefore moved out of arch/x86/boot/ and > > into the EFI libstub/ directory. > > > > Changes since v1 [0]: > > - Create new long mode GDT that extends the firmware's 32-bit only GDT > > so that preserving/restoring data segment selectors or swapping out > > GDTs and IDTs is no longer needed at all. > > - Rebase onto v6.14-rc1 > > > > [0] https://lore.kernel.org/all/20250108182218.1453754-8-ardb+git@xxxxxxxxxx/ > > > > Ard Biesheuvel (7): > > x86/efistub: Merge PE and handover entrypoints > > x86/efi/mixed: Check CPU compatibility without relying on verify_cpu() > > x86/efi/mixed: Factor out and clean up long mode entry > > x86/efi/mixed: Set up 1:1 mapping of lower 4GiB in the stub > > x86/efi/mixed: Remove dependency on legacy startup_32 code > > x86/efi/mixed: Simplify and document thunking logic > > x86/efi/mixed: Move mixed mode startup code into libstub > > > > Unless anyone minds, I'd like to queue this up in the EFI tree. > > Boris, Ingo? Sure! Acked-by: Ingo Molnar <mingo@xxxxxxxxxx> Thanks, Ingo