diff mbox series

[resent,RFC,17/22] efi_loader: add efi_remove_handle()

Message ID 20211004034430.41355-18-takahiro.akashi@linaro.org
State New
Headers show
Series efi_loader: more tightly integrate UEFI disks to device model | expand

Commit Message

AKASHI Takahiro Oct. 4, 2021, 3:44 a.m. UTC
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@linaro.org>

---
 include/efi_loader.h          | 2 ++
 lib/efi_loader/efi_boottime.c | 8 ++++++++
 2 files changed, 10 insertions(+)

-- 
2.33.0

Comments

Ilias Apalodimas Oct. 12, 2021, 8:16 a.m. UTC | #1
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@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?

Cheers
/Ilias
>  /**

>   * efi_create_handle() - create handle

>   * @handle: new handle

> -- 

> 2.33.0

>
AKASHI Takahiro Oct. 13, 2021, 12:55 a.m. UTC | #2
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@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

> >
diff mbox series

Patch

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);
+}
+
 /**
  * efi_create_handle() - create handle
  * @handle: new handle