diff options
Diffstat (limited to 'mm_4.patch')
-rw-r--r-- | mm_4.patch | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/mm_4.patch b/mm_4.patch new file mode 100644 index 000000000000..6a141025b67f --- /dev/null +++ b/mm_4.patch @@ -0,0 +1,101 @@ +--- + grub-core/kern/efi/mm.c | 23 ++++++++++++++++------- + 1 file changed, 16 insertions(+), 7 deletions(-) + +diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c +index 4d276bc87..cfc6a67fc 100644 +--- a/grub-core/kern/efi/mm.c ++++ b/grub-core/kern/efi/mm.c +@@ -504,7 +504,7 @@ add_memory_regions (grub_efi_memory_descriptor_t *memory_map, + + addr = grub_efi_allocate_pages_real (start, pages, + GRUB_EFI_ALLOCATE_ADDRESS, +- GRUB_EFI_LOADER_CODE); ++ GRUB_EFI_LOADER_CODE); + if (! addr) + grub_fatal ("cannot allocate conventional memory %p with %u pages", + (void *) ((grub_addr_t) start), +@@ -556,8 +556,8 @@ print_memory_map (grub_efi_memory_descriptor_t *memory_map, + } + #endif + +-void +-grub_efi_mm_init (void) ++static grub_err_t ++grub_efi_mm_add_regions (grub_efi_uint64_t required_bytes) + { + grub_efi_memory_descriptor_t *memory_map; + grub_efi_memory_descriptor_t *memory_map_end; +@@ -570,7 +570,7 @@ grub_efi_mm_init (void) + /* Prepare a memory region to store two memory maps. */ + memory_map = grub_efi_allocate_any_pages (2 * BYTES_TO_PAGES (MEMORY_MAP_SIZE)); + if (! memory_map) +- grub_fatal ("cannot allocate memory"); ++ return grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate memory"); + + /* Obtain descriptors for available memory. */ + map_size = MEMORY_MAP_SIZE; +@@ -588,14 +588,14 @@ grub_efi_mm_init (void) + + memory_map = grub_efi_allocate_any_pages (2 * BYTES_TO_PAGES (map_size)); + if (! memory_map) +- grub_fatal ("cannot allocate memory"); ++ return grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate memory"); + + mm_status = grub_efi_get_memory_map (&map_size, memory_map, 0, + &desc_size, 0); + } + + if (mm_status < 0) +- grub_fatal ("cannot get memory map"); ++ return grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot get memory map"); + + memory_map_end = NEXT_MEMORY_DESCRIPTOR (memory_map, map_size); + +@@ -610,7 +610,7 @@ grub_efi_mm_init (void) + + /* Allocate memory regions for GRUB's memory management. */ + add_memory_regions (filtered_memory_map, desc_size, +- filtered_memory_map_end, BYTES_TO_PAGES (DEFAULT_HEAP_SIZE)); ++ filtered_memory_map_end, BYTES_TO_PAGES (required_bytes)); + + #if 0 + /* For debug. */ +@@ -628,6 +628,15 @@ grub_efi_mm_init (void) + /* Release the memory maps. */ + grub_efi_free_pages ((grub_addr_t) memory_map, + 2 * BYTES_TO_PAGES (MEMORY_MAP_SIZE)); ++ ++ return GRUB_ERR_NONE; ++} ++ ++void ++grub_efi_mm_init (void) ++{ ++ if (grub_efi_mm_add_regions (DEFAULT_HEAP_SIZE) != GRUB_ERR_NONE) ++ grub_fatal ("%s", grub_errmsg); + } + + #if defined (__aarch64__) || defined (__arm__) || defined (__riscv) +-- +2.32.0 + + +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEF9hrgiFbCdvenl/rVbJhu7ckPpQFAmEY9eEACgkQVbJhu7ck +PpToNRAAmgY8k/pUck1W5suQpoJ3Ck6Kxuh6IUodllFPZskfgMAsddwHnGZCyqMA +rQhxvAizZyS8yoeuQyNeWZQT1QA66XgZNJ7V1jO2Yr3o1fZ4SkNs7pszZbgdfU91 +1koyjg070O7CsdJZsOstCw9BbfuJxb6cfICZzcJjKC1ecOPKsHUzbH8V03IImnes +dBM/VGoGXvazBg7eEVA6O6OvtpCtftHrhokdTDDL0dfhRNf9ps/FDI1sddmycmex +0GBljoPIT7ymCxJ0UxSHotwMExm/odh86jfihcfhWGh16MeAYTaMJIl6Q6RaK9jr +Gzdn65ZHHB7kUAt3JEi72oYw7tnaBOX8wcWe/vgp4XJ8d63T5E44svzUxetS+BvQ +hvuASM2hciIo4Pj33v96rzs9cth549DsBswra3yJlrTKZzyIcDLbGyuCs+cpa1Ek +02I0vlTbZLTAh86vGHESKmLaANDIxzh505fY8unQ61xe4SgLNa6B3Nf/KkwQh0uY +ceClslAq1WgLwoDMeyvCIGO4W7FGvoirH36CXgfOYVGiL4SsZ58FsGNO+7SS7FM7 +68DpuvpzxMUPTD4YOpNE7VIZV59S0/9g3+yL+fcn229jaCzbo48PvBfOUUyYBqw3 +onAqs5TQhn0KS+5zrm1ORnGjN5IXjxu8c+FPm9JGYLw+o6DcwBE= +=8bqP +-----END PGP SIGNATURE----- + + |