[PATCH 08/13] efi_loader: Tidy up use of addresses
Simon Glass
sjg at chromium.org
Tue Nov 26 16:39:12 CET 2024
Hi Heinrich,
On Tue, 26 Nov 2024 at 03:22, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> On 25.11.24 21:44, Simon Glass wrote:
> > The EFI loader's memory implementation is quite confusing. The EFI spec
> > requires that addresses are used in the calls to allocate_pages(), etc.
> > This is unavoidable.
> >
> > This usage then filters down to various functions within the
> > implementation. This is unfortunate, as there is no clear separation
> > between addresses and pointers. In some parts of the code things become
> > hopelessly confusing, and several bugs have crept in.
> >
> > Adjust the internal functions to always use a ulong for an address or a
> > void * for a pointer.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > include/efi_loader.h | 13 +++--
> > lib/efi_loader/efi_bootmgr.c | 9 ++--
> > lib/efi_loader/efi_boottime.c | 37 ++++++++------
> > lib/efi_loader/efi_helper.c | 7 +--
> > lib/efi_loader/efi_image_loader.c | 2 +-
> > lib/efi_loader/efi_memory.c | 84 +++++++++++++------------------
> > lib/efi_loader/efi_var_mem.c | 6 +--
> > 7 files changed, 76 insertions(+), 82 deletions(-)
> >
> > diff --git a/include/efi_loader.h b/include/efi_loader.h
> > index cae94fc4661..c4afcf2b60b 100644
> > --- a/include/efi_loader.h
> > +++ b/include/efi_loader.h
> > @@ -791,7 +791,7 @@ void *efi_alloc_aligned_pages(u64 len, enum efi_memory_type mem_type,
> > */
> > efi_status_t efi_allocate_pages(enum efi_allocate_type type,
> > enum efi_memory_type mem_type,
> > - efi_uintn_t pages, uint64_t *memoryp);
> > + efi_uintn_t pages, void **memoryp);
> >
> > /**
> > * efi_free_pages() - free memory pages
> > @@ -800,7 +800,7 @@ efi_status_t efi_allocate_pages(enum efi_allocate_type type,
> > * @pages: number of pages to be freed
> > * Return: status code
> > */
> > -efi_status_t efi_free_pages(uint64_t memory, efi_uintn_t pages);
> > +efi_status_t efi_free_pages(void *memory, efi_uintn_t pages);
>
> Read the UEFI spec, please.
Again?
>
> FreePages() expects EFI_PHYSICAL_ADDRESS which is defined as
>
> typedef UINT64 EFI_PHYSICAL_ADDRESS;
How does this comment relate to my patch? We should be using pointers
in most cases, as is done with allocate_pool.
[..]
Regards,
Simon
More information about the U-Boot
mailing list