• Ard Biesheuvel's avatar
    efi/x86: Simplify mixed mode call wrapper · ea5e1919
    Ard Biesheuvel authored
    Calling 32-bit EFI runtime services from a 64-bit OS involves
    switching back to the flat mapping with a stack carved out of
    memory that is 32-bit addressable.
    
    There is no need to actually execute the 64-bit part of this
    routine from the flat mapping as well, as long as the entry
    and return address fit in 32 bits. There is also no need to
    preserve part of the calling context in global variables: we
    can simply push the old stack pointer value to the new stack,
    and keep the return address from the code32 section in EBX.
    
    While at it, move the conditional check whether to invoke
    the mixed mode version of SetVirtualAddressMap() into the
    64-bit implementation of the wrapper routine.
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Arvind Sankar <nivedita@alum.mit.edu>
    Cc: Matthew Garrett <mjg59@google.com>
    Cc: linux-efi@vger.kernel.org
    Link: https://lkml.kernel.org/r/20200103113953.9571-11-ardb@kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    ea5e1919
efi.c 27.5 KB