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
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. */
}
#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;
}
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