diff options
author | Ard Biesheuvel <ardb@kernel.org> | 2020-01-03 14:39:43 +0300 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2020-01-10 20:55:03 +0300 |
commit | ea5e1919b44f09fce72d919fbb87f9611fc700a6 (patch) | |
tree | 7f361d34e2bb9248a612f03aa4388870d3651649 /include/linux/efi.h | |
parent | e5f930fe8dafd2055220c95958926af16ee20713 (diff) | |
download | linux-ea5e1919b44f09fce72d919fbb87f9611fc700a6.tar.xz |
efi/x86: Simplify mixed mode call wrapper
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: Ard 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.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include/linux/efi.h')
0 files changed, 0 insertions, 0 deletions