grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Make EFI minimum heap size configurable via --enable-efi-min-hea


From: Char, Hanson
Subject: [PATCH] Make EFI minimum heap size configurable via --enable-efi-min-heap-mb
Date: Mon, 4 Jan 2021 19:34:23 +0000
User-agent: Microsoft-MacOutlook/16.43.20110804

When booted in UEFI mode, Grub would fail to load a ramdisk of size larger than 
"(total_pages >> 2)" with

    "error: out of memory"

(https://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/kern/efi/mm.c#n616)

This proposed patch adds a new option that can be used to specify the "EFI min 
heap size" in MB.  For example,

    ./configure --with-platform=efi --target=x86_64 --enable-efi-min-heap-mb=600

The patch has been successfully tested to load large ramdisk with size that 
would otherwise fail.

Regards,
Hanson

From 9bd4220a6b0fe2d49c6aed347f5d2bbff5fb2d8d Mon Sep 17 00:00:00 2001
From: Hanson Char <hchar@amazon.com>
Date: Thu, 31 Dec 2020 12:49:33 -0800
Subject: [PATCH] Make EFI minimum heap size configurable via
--enable-efi-min-heap-mb

---
config.h.in             |  2 ++
configure.ac            | 18 ++++++++++++++++++
grub-core/kern/efi/mm.c |  2 +-
3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/config.h.in b/config.h.in
index 9e8f9911b..413287410 100644
--- a/config.h.in
+++ b/config.h.in
@@ -13,6 +13,8 @@
#define DISK_CACHE_STATS @DISK_CACHE_STATS@
#define BOOT_TIME_STATS @BOOT_TIME_STATS@

+#define EFI_MIN_HEAP_MB @EFI_MIN_HEAP_MB@
+
/* We don't need those.  */
#define MINILZO_CFG_SKIP_LZO_PTR 1
#define MINILZO_CFG_SKIP_LZO_UTIL 1
diff --git a/configure.ac b/configure.ac
index 7c10a4db7..8c4bb820e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1934,6 +1934,21 @@ AC_SUBST(HOST_CCASFLAGS)

AC_SUBST(BUILD_LIBM)

+#
+# EFI minimum heap size in MB ranging from 1 to 1600.  Default is 1.
+#
+AC_ARG_ENABLE([efi-min-heap-mb],
+              [AS_HELP_STRING([--enable-efi-min-heap-mb=SIZE_IN_MB],
+                              [set the EFI minimum heap size in MB between 1 
and 1600 inclusive])])
+AS_IF([test x"$enable_efi_min_heap_mb" = x -o x"$enable_efi_min_heap_mb" = 
xno],
+      [EFI_MIN_HEAP_MB=1],
+      [AS_IF([test x"${enable_efi_min_heap_mb//@<:@0-9@:>@/}" != x \
+           || test "$enable_efi_min_heap_mb" -lt 1 -o 
"$enable_efi_min_heap_mb" -gt 1600],
+             [AC_MSG_ERROR([EFI minimum heap size must be between 1 and 1600 
inclusive])],
+             [EFI_MIN_HEAP_MB=$enable_efi_min_heap_mb])])
+
+AC_SUBST([EFI_MIN_HEAP_MB])
+
#
# Automake conditionals
#
@@ -2132,5 +2147,8 @@ echo "Without liblzma (no support for XZ-compressed mips 
images) ($liblzma_excus
else
echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
fi
+if [ x"$enable_efi_min_heap_mb" != x ]; then
+echo efi-min-heap-mb: $EFI_MIN_HEAP_MB
+fi
echo "*******************************************************"
]
diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
index 457772d57..ac5112b57 100644
--- a/grub-core/kern/efi/mm.c
+++ b/grub-core/kern/efi/mm.c
@@ -39,7 +39,7 @@
#define MEMORY_MAP_SIZE 0x3000

/* The minimum and maximum heap size for GRUB itself.  */
-#define MIN_HEAP_SIZE  0x100000
+#define MIN_HEAP_SIZE  (EFI_MIN_HEAP_MB * 0x100000)
#define MAX_HEAP_SIZE   (1600 * 0x100000)

static void *finish_mmap_buf = 0;
--
2.29.2


reply via email to

[Prev in Thread] Current Thread [Next in Thread]