[PATCH 4/6] efi: Avoid pool allocation in efi_get_memory_map_alloc()
Simon Glass
sjg at chromium.org
Wed Jul 31 16:39:36 CEST 2024
Hi Heinrich,
On Thu, 25 Jul 2024 at 10:38, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> On 25.07.24 15:56, Simon Glass wrote:
> > This function returns the memory map, allocating memory for it. But it
> > can just use malloc() directly, rather than calling the pool allocator.
> > Update it.
>
> The size of the memory map may exceed CONFIG_SYS_MALLOC_LEN which tends
> to be astonishingly small: 1 MiB or less on many boards.
The memory map is typically <20 entries, isn't it? I can't see that
using too much space. If EFI needs malloc() to be larger than 1MB, we
could enforce that with Kconfig.
Regards,
Simon
>
> Best regards
>
> Heinrich
>
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > lib/efi_loader/efi_memory.c | 9 ++++-----
> > 1 file changed, 4 insertions(+), 5 deletions(-)
> >
> > diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
> > index 087f4c88cdf..2945f5648c7 100644
> > --- a/lib/efi_loader/efi_memory.c
> > +++ b/lib/efi_loader/efi_memory.c
> > @@ -850,14 +850,13 @@ efi_status_t efi_get_memory_map_alloc(efi_uintn_t *map_size,
> > ret = efi_get_memory_map(map_size, *memory_map, NULL, NULL, NULL);
> > if (ret == EFI_BUFFER_TOO_SMALL) {
> > *map_size += sizeof(struct efi_mem_desc); /* for the map */
> > - ret = efi_allocate_pool(EFI_BOOT_SERVICES_DATA, *map_size,
> > - (void **)memory_map);
> > - if (ret != EFI_SUCCESS)
> > - return ret;
> > + *memory_map = malloc(*map_size);
> > + if (!*memory_map)
> > + return EFI_OUT_OF_RESOURCES;
> > ret = efi_get_memory_map(map_size, *memory_map,
> > NULL, NULL, NULL);
> > if (ret != EFI_SUCCESS) {
> > - efi_free_pool(*memory_map);
> > + free(*memory_map);
> > *memory_map = NULL;
> > }
> > }
>
More information about the U-Boot
mailing list