Thanks Arvind, this is good stuff. On Thu, 30 Jan 2020 at 21:04, Arvind Sankar <nivedita@xxxxxxxxxxxx> wrote: > > For the 64-bit kernel, we do not need to setup a GDT in efi_main, as the > next step in the boot, startup_64, will set one up. > This seems obvious, but I need a nod from Ingo or Boris before I can take this. > This series factors out the GDT setup into a separate function and > restricts it to the 32-bit kernel. The memory allocation for the GDT is > also changed from allocating a full page via efi_alloc_low to the > required space (32 bytes) from alloc_pool boot service. > Can we go all the way and simply make this if (IS_ENABLED(CONFIG_X64_32)) { static const struct desc_struct desc[] __aligned(8) = { {}, /* The first GDT is a dummy. */ {}, /* Second entry is unused on 32-bit */ GDT_ENTRY_INIT(0xa09b, 0, 0xfffff), /* __KERNEL_CS */ GDT_ENTRY_INIT(0xc093, 0, 0xfffff), /* __KERNEL_DS */ }; struct desc_ptr gdt = { sizeof(desc) - 1, (unsigned long)desc }; native_load_gdt(&gdt); } (and drop the #defines from eboot.h that we no longer use) > The final two patches are doc fixes to clarify that the 32-bit EFI > handover entry point also requires segments/GDT to be setup, and that > for 64-bit mode we don't have any special segment requirements (the > 64-bit doc currently is just a copy of the 32-bit doc which isn't > right). > > Arvind Sankar (8): > efi/x86: Use C wrapper instead of inline assembly > efi/x86: Allocate the GDT pointer on the stack > efi/x86: Factor GDT setup code into a function Given the above, I don't think we need the separate function, but if we do, please drop the 64-bit code first, otherwise there is much more churn than necessary. > efi/x86: Only setup the GDT for 32-bit kernel > efi/x86: Allocate only the required 32 bytes for the GDT > efi/x86: Change __KERNEL_{CS,DS} to __BOOT_{CS,DS} > Documentation/x86/boot: Clarify segment requirements for EFI handover > Documentation/x86/boot: Correct segment requirements for 64-bit boot > > Documentation/x86/boot.rst | 15 +- > arch/x86/boot/compressed/eboot.c | 174 ++++++++++-------------- > arch/x86/boot/compressed/efi_thunk_64.S | 4 +- > 3 files changed, 85 insertions(+), 108 deletions(-) > > -- > 2.24.1 >