[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Remove unnecessary constraints on required_pages for EFI boot
From: |
Char, Hanson |
Subject: |
[PATCH] Remove unnecessary constraints on required_pages for EFI boot |
Date: |
Sun, 10 Jan 2021 19:41:09 +0000 |
User-agent: |
Microsoft-MacOutlook/16.43.20110804 |
As reported earlier, 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)
Further investigation into the EFI memory map indicates the current limit of
MAX_HEAP_MEMORY and the use of a quarter of the total_pages returned from EFI
available memory (type 7) as the default seems arbitrary and unnecessary.
Therefore this proposed patch removes the aribrary limit, and lets Grub make
full use of the EFI available memory reported by the BIOS.
The patch has been successfully tested to load large ramdisk with size that
would otherwise fail.
Regards,
Hanson
From ceb27404eb281a74aa82799885cd74b530e9237e Mon Sep 17 00:00:00 2001
From: Hanson Char <hchar@amazon.com>
Date: Sun, 10 Jan 2021 10:57:06 -0800
Subject: [PATCH] Remove unnecessary constraints on required_pages for EFI boot
---
grub-core/kern/efi/mm.c | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
index 457772d57..9cf6a4d34 100644
--- a/grub-core/kern/efi/mm.c
+++ b/grub-core/kern/efi/mm.c
@@ -38,9 +38,8 @@
a multiplier of 4KB. */
#define MEMORY_MAP_SIZE 0x3000
-/* The minimum and maximum heap size for GRUB itself. */
+/* The minimum heap size for GRUB itself. */
#define MIN_HEAP_SIZE 0x100000
-#define MAX_HEAP_SIZE (1600 * 0x100000)
static void *finish_mmap_buf = 0;
static grub_efi_uintn_t finish_mmap_size = 0;
@@ -569,7 +568,6 @@ grub_efi_mm_init (void)
grub_efi_memory_descriptor_t *filtered_memory_map_end;
grub_efi_uintn_t map_size;
grub_efi_uintn_t desc_size;
- grub_efi_uint64_t total_pages;
grub_efi_uint64_t required_pages;
int mm_status;
@@ -610,14 +608,10 @@ grub_efi_mm_init (void)
filtered_memory_map_end = filter_memory_map (memory_map, filtered_memory_map,
desc_size, memory_map_end);
- /* By default, request a quarter of the available memory. */
- total_pages = get_total_pages (filtered_memory_map, desc_size,
- filtered_memory_map_end);
- required_pages = (total_pages >> 2);
+ required_pages = get_total_pages (filtered_memory_map, desc_size,
+ filtered_memory_map_end);
if (required_pages < BYTES_TO_PAGES (MIN_HEAP_SIZE))
required_pages = BYTES_TO_PAGES (MIN_HEAP_SIZE);
- else if (required_pages > BYTES_TO_PAGES (MAX_HEAP_SIZE))
- required_pages = BYTES_TO_PAGES (MAX_HEAP_SIZE);
/* Sort the filtered descriptors, so that GRUB can allocate pages
from smaller regions. */
--
2.29.2
- [PATCH] Remove unnecessary constraints on required_pages for EFI boot,
Char, Hanson <=