From 69da3a59d80ebfe341a37ee63714a201bf1bc59c Mon Sep 17 00:00:00 2001 From: longpanda Date: Tue, 3 May 2022 18:41:16 +0800 Subject: [PATCH] Reduce the required low memory. --- .../MOD_SRC/grub-2.04/grub-core/kern/efi/mm.c | 25 ++++++++++++++++--- .../grub-2.04/grub-core/ventoy/ventoy_cmd.c | 11 +++++--- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/mm.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/mm.c index cb65cb35..5a70e098 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/mm.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/mm.c @@ -49,8 +49,11 @@ static grub_efi_uintn_t finish_desc_size; static grub_efi_uint32_t finish_desc_version; int grub_efi_is_finished = 0; +/* 160MB 160 * 1024 * 1024 / 4096 */ +#define VTOY_CHAIN_MIN_PAGES (160 * 256) static grub_efi_uint64_t g_total_pages; -static grub_efi_uint64_t g_required_pages; +static grub_efi_uint64_t g_org_required_pages; +static grub_efi_uint64_t g_new_required_pages; /* * We need to roll back EFI allocations on exit. Remember allocations that @@ -617,8 +620,21 @@ grub_efi_mm_init (void) else if (required_pages > BYTES_TO_PAGES (MAX_HEAP_SIZE)) required_pages = BYTES_TO_PAGES (MAX_HEAP_SIZE); + g_org_required_pages = required_pages; + if (((total_pages - required_pages) >> 2) < VTOY_CHAIN_MIN_PAGES) + { + if (total_pages > (VTOY_CHAIN_MIN_PAGES << 2)) + { + g_new_required_pages = total_pages - (VTOY_CHAIN_MIN_PAGES << 2); + if (g_new_required_pages >= 8192) + { + required_pages = g_new_required_pages; + } + } + } + g_total_pages = total_pages; - g_required_pages = required_pages; + g_new_required_pages = required_pages; /* Sort the filtered descriptors, so that GRUB can allocate pages from smaller regions. */ @@ -677,9 +693,10 @@ grub_efi_get_ram_base(grub_addr_t *base_addr) } #endif -void grub_efi_get_reserved_page_num(grub_uint64_t *total, grub_uint64_t *required) +void grub_efi_get_reserved_page_num(grub_uint64_t *total, grub_uint64_t *org_required, grub_uint64_t *new_required) { *total = g_total_pages; - *required = g_required_pages; + *org_required = g_org_required_pages; + *new_required = g_new_required_pages; } diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c index 1d1b972f..fdb92961 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c @@ -5571,19 +5571,22 @@ static grub_err_t ventoy_cmd_fn_mutex_lock(grub_extcmd_context_t ctxt, int argc, static grub_err_t ventoy_cmd_dump_rsv_page(grub_extcmd_context_t ctxt, int argc, char **args) { grub_uint64_t total; - grub_uint64_t required; + grub_uint64_t org_required; + grub_uint64_t new_required; (void)ctxt; (void)argc; (void)args; #ifdef GRUB_MACHINE_EFI - grub_efi_get_reserved_page_num(&total, &required); + grub_efi_get_reserved_page_num(&total, &org_required, &new_required); grub_printf("Total pages: %llu\n", (unsigned long long)total); - grub_printf("Required pages: %llu\n", (unsigned long long)required); + grub_printf("OrgReq pages: %llu\n", (unsigned long long)org_required); + grub_printf("NewReq pages: %llu\n", (unsigned long long)new_required); #else (void)total; - (void)required; + (void)org_required; + (void)new_required; grub_printf("Non EFI mode!\n"); #endif