All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
To: Masahisa Kojima <masahisa.kojima@linaro.org>
Cc: u-boot@lists.denx.de, Heinrich Schuchardt <xypron.glpk@gmx.de>
Subject: Re: [PATCH] efi_loader: use event callback for initrd deregistration
Date: Fri, 19 Apr 2024 14:13:45 +0300	[thread overview]
Message-ID: <ZiJR6bqj4BFRjqES@hera> (raw)
In-Reply-To: <CAC_iWj+giW2Wyagi2eH9668G2HtU=BXuhjUvTpPWHFH5sA23rA@mail.gmail.com>

Kojima-san

Apologies but for some reason we failed to pull this patch....
In meantime some parts of the bootefi.c code -- specifically theinitrd
cleanup, have been moved to efi_helper.c

Any chance you can rebase this? If not I'll try to find some time to do it

/Ilias
On Mon, Dec 04, 2023 at 01:38:17PM +0200, Ilias Apalodimas wrote:
> Thanks for cleaning this up!
>
> On Mon, 4 Dec 2023 at 06:31, Masahisa Kojima <masahisa.kojima@linaro.org> wrote:
> >
> > Currently efi_initrd_deregister() is called in bootefi.c
> > when the image started from bootefi command returns.
> > Since efi_guid_event_group_return_to_efibootmgr event is
> > implemented, so let's use this event for invoking
> > initrd deregistration.
> >
> > Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
> > ---
> > Note that this patch can be applied to u-boot/next.
> > This patch requires the patch e0d1a1ea68("efi_loader: add return to efibootmgr event group")
> >
> >  cmd/bootefi.c                    |  5 --
> >  lib/efi_loader/efi_load_initrd.c | 82 +++++++++++++++++++++-----------
> >  2 files changed, 55 insertions(+), 32 deletions(-)
>
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> Tested-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
>
> >
> > diff --git a/cmd/bootefi.c b/cmd/bootefi.c
> > index 4d74969ad6..e52bd3f743 100644
> > --- a/cmd/bootefi.c
> > +++ b/cmd/bootefi.c
> > @@ -390,11 +390,6 @@ static efi_status_t do_bootefi_exec(efi_handle_t handle, void *load_options)
> >  out:
> >         free(load_options);
> >
> > -       if (IS_ENABLED(CONFIG_EFI_LOAD_FILE2_INITRD)) {
> > -               if (efi_initrd_deregister() != EFI_SUCCESS)
> > -                       log_err("Failed to remove loadfile2 for initrd\n");
> > -       }
> > -
> >         /* Notify EFI_EVENT_GROUP_RETURN_TO_EFIBOOTMGR event group. */
> >         list_for_each_entry(evt, &efi_events, link) {
> >                 if (evt->group &&
> > diff --git a/lib/efi_loader/efi_load_initrd.c b/lib/efi_loader/efi_load_initrd.c
> > index 193433782c..7ca7785c04 100644
> > --- a/lib/efi_loader/efi_load_initrd.c
> > +++ b/lib/efi_loader/efi_load_initrd.c
> > @@ -184,6 +184,50 @@ out:
> >         return ret;
> >  }
> >
> > +/**
> > + * efi_initrd_deregister() - delete the handle for loading initial RAM disk
> > + *
> > + * This will delete the handle containing the Linux specific vendor device
> > + * path and EFI_LOAD_FILE2_PROTOCOL for loading an initrd
> > + *
> > + * Return:     status code
> > + */
> > +efi_status_t efi_initrd_deregister(void)
> > +{
> > +       efi_status_t ret;
> > +
> > +       if (!efi_initrd_handle)
> > +               return EFI_SUCCESS;
> > +
> > +       ret = efi_uninstall_multiple_protocol_interfaces(efi_initrd_handle,
> > +                                                        /* initramfs */
> > +                                                        &efi_guid_device_path,
> > +                                                        &dp_lf2_handle,
> > +                                                        /* LOAD_FILE2 */
> > +                                                        &efi_guid_load_file2_protocol,
> > +                                                        &efi_lf2_protocol,
> > +                                                        NULL);
> > +       efi_initrd_handle = NULL;
> > +
> > +       return ret;
> > +}
> > +
> > +/**
> > + * efi_initrd_return_notify() - return to efibootmgr callback
> > + *
> > + * @event:     the event for which this notification function is registered
> > + * @context:   event context
> > + */
> > +static void EFIAPI efi_initrd_return_notify(struct efi_event *event,
> > +                                                 void *context)
> > +{
> > +       efi_status_t ret;
> > +
> > +       EFI_ENTRY("%p, %p", event, context);
> > +       ret = efi_initrd_deregister();
> > +       EFI_EXIT(ret);
> > +}
> > +
> >  /**
> >   * efi_initrd_register() - create handle for loading initial RAM disk
> >   *
> > @@ -197,6 +241,7 @@ out:
> >  efi_status_t efi_initrd_register(void)
> >  {
> >         efi_status_t ret;
> > +       struct efi_event *event;
> >
> >         /*
> >          * Allow the user to continue if Boot#### file path is not set for
> > @@ -215,34 +260,17 @@ efi_status_t efi_initrd_register(void)
> >                                                        &efi_guid_load_file2_protocol,
> >                                                        &efi_lf2_protocol,
> >                                                        NULL);
> > +       if (ret != EFI_SUCCESS) {
> > +               log_err("installing EFI_LOAD_FILE2_PROTOCOL failed\n");
> > +               return ret;
> > +       }
> >
> > -       return ret;
> > -}
> > -
> > -/**
> > - * efi_initrd_deregister() - delete the handle for loading initial RAM disk
> > - *
> > - * This will delete the handle containing the Linux specific vendor device
> > - * path and EFI_LOAD_FILE2_PROTOCOL for loading an initrd
> > - *
> > - * Return:     status code
> > - */
> > -efi_status_t efi_initrd_deregister(void)
> > -{
> > -       efi_status_t ret;
> > -
> > -       if (!efi_initrd_handle)
> > -               return EFI_SUCCESS;
> > -
> > -       ret = efi_uninstall_multiple_protocol_interfaces(efi_initrd_handle,
> > -                                                        /* initramfs */
> > -                                                        &efi_guid_device_path,
> > -                                                        &dp_lf2_handle,
> > -                                                        /* LOAD_FILE2 */
> > -                                                        &efi_guid_load_file2_protocol,
> > -                                                        &efi_lf2_protocol,
> > -                                                        NULL);
> > -       efi_initrd_handle = NULL;
> > +       ret = efi_create_event(EVT_NOTIFY_SIGNAL, TPL_CALLBACK,
> > +                              efi_initrd_return_notify, NULL,
> > +                              &efi_guid_event_group_return_to_efibootmgr,
> > +                              &event);
> > +       if (ret != EFI_SUCCESS)
> > +               log_err("Creating event failed\n");
> >
> >         return ret;
> >  }
> >
> > base-commit: 4a363dd516856344558034027e40d903868f67b4
> > --
> > 2.34.1
> >

      reply	other threads:[~2024-04-19 11:13 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-04  4:30 [PATCH] efi_loader: use event callback for initrd deregistration Masahisa Kojima
2023-12-04 11:38 ` Ilias Apalodimas
2024-04-19 11:13   ` Ilias Apalodimas [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZiJR6bqj4BFRjqES@hera \
    --to=ilias.apalodimas@linaro.org \
    --cc=masahisa.kojima@linaro.org \
    --cc=u-boot@lists.denx.de \
    --cc=xypron.glpk@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.