On Mon, Jun 1, 2020, 21:34 Patrick Steinhardt <p...@pks.im> wrote: > Adjust the interface of `grub_efi_mm_add_regions ()` to take a set of > `GRUB_MM_REGION_*` flags, which most notably is currently only the > `CONSECUTVE` flag. This allows us to set the function up as callback for > the memory subsystem and have it call out to us in case there's not > enough pages available in the current heap. > > Signed-off-by: Patrick Steinhardt <p...@pks.im> > --- > grub-core/kern/efi/mm.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c > index 76f0f6a0f..092097355 100644 > --- a/grub-core/kern/efi/mm.c > +++ b/grub-core/kern/efi/mm.c > @@ -468,7 +468,8 @@ static void > add_memory_regions (grub_efi_memory_descriptor_t *memory_map, > grub_efi_uintn_t desc_size, > grub_efi_memory_descriptor_t *memory_map_end, > - grub_efi_uint64_t required_pages) > + grub_efi_uint64_t required_pages, > + char consecutive) > Please don't use char for anything other than strings. It has unfortunate design decisions. Currently we use int as bool. It's something we might want to revisit in the future but until then, let's be consistent
> { > grub_efi_memory_descriptor_t *desc; > > @@ -482,6 +483,10 @@ add_memory_regions (grub_efi_memory_descriptor_t > *memory_map, > > start = desc->physical_start; > pages = desc->num_pages; > + > + if (pages < required_pages && consecutive) > + continue; > + > if (pages > required_pages) > { > start += PAGES_TO_BYTES (pages - required_pages); > @@ -543,7 +548,7 @@ print_memory_map (grub_efi_memory_descriptor_t > *memory_map, > #endif > > static grub_err_t > -grub_efi_mm_add_regions (grub_efi_uint64_t required_bytes) > +grub_efi_mm_add_regions (grub_efi_uint64_t required_bytes, unsigned flags) > { > grub_efi_memory_descriptor_t *memory_map; > grub_efi_memory_descriptor_t *memory_map_end; > @@ -597,7 +602,8 @@ grub_efi_mm_add_regions (grub_efi_uint64_t > required_bytes) > /* Allocate memory regions for GRUB's memory management. */ > add_memory_regions (filtered_memory_map, desc_size, > filtered_memory_map_end, > - BYTES_TO_PAGES (required_bytes)); > + BYTES_TO_PAGES (required_bytes), > + flags & GRUB_MM_REGION_CONSECUTIVE); > > #if 0 > /* For debug. */ > @@ -622,8 +628,9 @@ grub_efi_mm_add_regions (grub_efi_uint64_t > required_bytes) > void > grub_efi_mm_init (void) > { > - if (grub_efi_mm_add_regions (DEFAULT_HEAP_SIZE) != GRUB_ERR_NONE) > + if (grub_efi_mm_add_regions (DEFAULT_HEAP_SIZE, 0) != GRUB_ERR_NONE) > grub_fatal (grub_errmsg); > + grub_mm_region_fn = grub_efi_mm_add_regions; > } > > #if defined (__aarch64__) || defined (__arm__) || defined (__riscv) > -- > 2.26.2 > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel