[PATCH] efi_loader: add comments on efi_file_from_path() regarding alignment

Ilias Apalodimas ilias.apalodimas at linaro.org
Thu Nov 10 15:09:54 CET 2022


Hi Heinrich

On Thu, 10 Nov 2022 at 15:46, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> On 11/10/22 14:31, Ilias Apalodimas wrote:
> > UEFI specification requires pointers that are passed to protocol member
> > functions to be aligned.  There's a u16_strdup in that function which
> > doesn't make sense otherwise  Add a comment so no one removes it
> > accidentally
> >
> > Signed-off-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> > ---
> >   lib/efi_loader/efi_file.c | 5 +++++
> >   1 file changed, 5 insertions(+)
> >
> > diff --git a/lib/efi_loader/efi_file.c b/lib/efi_loader/efi_file.c
> > index 8480ed3007c7..5c254ccdd64d 100644
> > --- a/lib/efi_loader/efi_file.c
> > +++ b/lib/efi_loader/efi_file.c
> > @@ -1135,6 +1135,11 @@ struct efi_file_handle *efi_file_from_path(struct efi_device_path *fp)
> >                       return NULL;
> >               }
> >
> > +             /*
> > +              * UEFI specification requires pointers that are passed to
> > +              * protocol member functions to be aligned.  So memcpy it
> > +              * unconditionally
> > +              */
> >               filename = u16_strdup(fdp->str);
>
> On ARM we enable unaligned access which is supported by the CPU. On
> RISC-V unaligned access is emulated by OpenSBI which is very slow.
> Therefore copying make sense.
>
> u16_strdup() calls u16_strsize() which itself is not caring about
> alignment. So this u16_strdup does not resolve all alignment issues.
>
> We could use the length field of the file path node to determine the
> length of the string to be copied and invoke
>
>      malloc(fdp->length - 4).
>      memcpy(,, fdp->length - 4).
>
> This would be better performance wise on RISC-V.

Sure that makes sense.  But the comment is for EFI functions that have
that string as an argument.  Will you pick the comment and I can send
that on a followup patch?

Thanks
/Ilias
>
> Best regards
>
> Heinrich
>
> >               if (!filename)
> >                       return NULL;
>


More information about the U-Boot mailing list