
On 09/17/2018 04:45 AM, Alexander Graf wrote:
The UEFI spec mandates that runtime sections are 64kb aligned to enable
%s/kb/ kiB/g The spec requires a multiple of 64,000 not of 65,536.
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);
Please, add a comment in the code referring to the requirement in the UEFI spec.
Best regards
Heinrich
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);