efi/libstub/arm64: Switch to ordinary page allocator for kernel image
authorArd Biesheuvel <ardb@kernel.org>
Tue, 31 Mar 2020 08:59:39 +0000 (10:59 +0200)
committerArd Biesheuvel <ardb@kernel.org>
Fri, 24 Apr 2020 12:52:16 +0000 (14:52 +0200)
It is no longer necessary to locate the kernel as low as possible in
physical memory, and so we can switch from efi_low_alloc() [which is
a rather nasty concoction on top of GetMemoryMap()] to a new helper
called efi_allocate_pages_aligned(), which simply rounds up the size
to account for the alignment, and frees the misaligned pages again.

So considering that the kernel can live anywhere in the physical
address space, as long as its alignment requirements are met, let's
switch to efi_allocate_pages_aligned() to allocate the pages.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
drivers/firmware/efi/libstub/arm64-stub.c

index 6fc3bd9a56db2073aab8ac41ccc43b36159b9b2d..99b67e88a33b6002f82741c38f031035262cc860 100644 (file)
@@ -98,8 +98,8 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
                        return EFI_SUCCESS;
                }
 
-               status = efi_low_alloc(*reserve_size,
-                                      min_kimg_align, reserve_addr);
+               status = efi_allocate_pages_aligned(*reserve_size, reserve_addr,
+                                                   ULONG_MAX, min_kimg_align);
 
                if (status != EFI_SUCCESS) {
                        pr_efi_err("Failed to relocate kernel\n");