
The UEFI spec mandates that runtime sections are 64kb aligned to enable support for 64kb page size OSs.
This patch ensures that we extend the runtime section to 64kb to be spec compliant.
Signed-off-by: Alexander Graf agraf@suse.de --- lib/efi_loader/efi_memory.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c index 4f8cb545ad..66ad54a152 100644 --- a/lib/efi_loader/efi_memory.c +++ b/lib/efi_loader/efi_memory.c @@ -11,6 +11,7 @@ #include <mapmem.h> #include <watchdog.h> #include <linux/list_sort.h> +#include <linux/sizes.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -526,10 +527,10 @@ static void add_u_boot_and_runtime(void) uboot_pages = (gd->ram_top - uboot_start) >> EFI_PAGE_SHIFT; efi_add_memory_map(uboot_start, uboot_pages, EFI_LOADER_DATA, false);
- /* Add Runtime Services */ - runtime_start = (ulong)&__efi_runtime_start & ~EFI_PAGE_MASK; + /* Add Runtime Services,must be 64kb aligned */ + runtime_start = (ulong)&__efi_runtime_start & ~(SZ_64K - 1); runtime_end = (ulong)&__efi_runtime_stop; - runtime_end = (runtime_end + EFI_PAGE_MASK) & ~EFI_PAGE_MASK; + runtime_end = (runtime_end + SZ_64K - 1) & ~(SZ_64K - 1); runtime_pages = (runtime_end - runtime_start) >> EFI_PAGE_SHIFT; efi_add_memory_map(runtime_start, runtime_pages, EFI_RUNTIME_SERVICES_CODE, false);