[resent RFC 17/22] efi_loader: add efi_remove_handle()
AKASHI Takahiro
takahiro.akashi at linaro.org
Wed Oct 13 02:55:10 CEST 2021
On Tue, Oct 12, 2021 at 11:16:03AM +0300, Ilias Apalodimas wrote:
> On Mon, Oct 04, 2021 at 12:44:25PM +0900, AKASHI Takahiro wrote:
> > This function is a counterpart of efi_add_handle() and will be used
> > in order to remove an efi_disk object in a later patch.
> >
> > Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
> > ---
> > include/efi_loader.h | 2 ++
> > lib/efi_loader/efi_boottime.c | 8 ++++++++
> > 2 files changed, 10 insertions(+)
> >
> > diff --git a/include/efi_loader.h b/include/efi_loader.h
> > index cfbe1fe659ef..50f4119dcdfb 100644
> > --- a/include/efi_loader.h
> > +++ b/include/efi_loader.h
> > @@ -579,6 +579,8 @@ void efi_save_gd(void);
> > void efi_runtime_relocate(ulong offset, struct efi_mem_desc *map);
> > /* Add a new object to the object list. */
> > void efi_add_handle(efi_handle_t obj);
> > +/* Remove a object from the object list. */
> > +void efi_remove_handle(efi_handle_t obj);
> > /* Create handle */
> > efi_status_t efi_create_handle(efi_handle_t *handle);
> > /* Delete handle */
> > diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
> > index f0283b539e46..b2503b74233b 100644
> > --- a/lib/efi_loader/efi_boottime.c
> > +++ b/lib/efi_loader/efi_boottime.c
> > @@ -503,6 +503,14 @@ void efi_add_handle(efi_handle_t handle)
> > list_add_tail(&handle->link, &efi_obj_list);
> > }
> >
> > +void efi_remove_handle(efi_handle_t handle)
> > +{
> > + if (!handle)
> > + return;
> > +
> > + list_del(&handle->link);
> > +}
> > +
>
> We already have efi_delete_handle(). You can't unconditionally remove a
> handle unless all protocols are removed. Can't you just use the existing
> function?
My intent was to add this function as a counterpart of efi_add_handle()
since not all the handles are dynamically allocated on its own.
As far as my usage in this patch series is concerned, however, it is always
used accompanying efi_remove_all_protocols() and free().
(See efi_disk_delete_xxx() in efi_disk.c)
So, yes we can use efi_delete_handle() instead.
(assuming 'header' is the first member in struct efi_disk_obj.)
-Takahiro Akashi
> Cheers
> /Ilias
> > /**
> > * efi_create_handle() - create handle
> > * @handle: new handle
> > --
> > 2.33.0
> >
More information about the U-Boot
mailing list