Commit 3e1e00c0 authored by Ard Biesheuvel's avatar Ard Biesheuvel
Browse files

efi: x86: move mixed mode stack PA variable out of 'efi_scratch'



As a first step to removing the awkward 'struct efi_scratch' definition
that conveniently combines the storage of the mixed mode stack pointer
with the MM pointer variable that records the task's MM pointer while it
is being replaced with the EFI MM one, move the mixed mode stack pointer
into a separate variable.

Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
parent 3820749d
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#include <linux/pgtable.h>

extern unsigned long efi_fw_vendor, efi_config_table;
extern unsigned long efi_mixed_mode_stack_pa;

/*
 * We map the EFI regions needed for runtime services non-contiguously,
@@ -96,11 +97,9 @@ extern asmlinkage u64 __efi_call(void *fp, ...);

/*
 * struct efi_scratch - Scratch space used while switching to/from efi_mm
 * @phys_stack: stack used during EFI Mixed Mode
 * @prev_mm:    store/restore stolen mm_struct while switching to/from efi_mm
 */
struct efi_scratch {
	u64			phys_stack;
	struct mm_struct	*prev_mm;
} __packed;

+1 −1
Original line number Diff line number Diff line
@@ -256,7 +256,7 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
		return 1;
	}

	efi_scratch.phys_stack = page_to_phys(page + 1); /* stack grows down */
	efi_mixed_mode_stack_pa = page_to_phys(page + 1); /* stack grows down */

	npages = (_etext - _text) >> PAGE_SHIFT;
	text = __pa(_text);
+5 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ SYM_CODE_START(__efi64_thunk)
	 * Switch to 1:1 mapped 32-bit stack pointer.
	 */
	movq	%rsp, %rax
	movq	efi_scratch(%rip), %rsp
	movq	efi_mixed_mode_stack_pa(%rip), %rsp
	push	%rax

	/*
@@ -70,3 +70,7 @@ SYM_CODE_START(__efi64_thunk)
	pushl	%ebp
	lret
SYM_CODE_END(__efi64_thunk)

	.bss
	.balign 8
SYM_DATA(efi_mixed_mode_stack_pa, .quad 0)