[PATCH v4 7/7] smbios: Require the caller to align the SMBIOS table
Ilias Apalodimas
ilias.apalodimas at linaro.org
Fri Dec 29 07:15:33 CET 2023
On Thu, 28 Dec 2023 at 23:00, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
>
>
> Am 28. Dezember 2023 20:48:04 MEZ schrieb Simon Glass <sjg at chromium.org>:
> >Hi Heinrich,
> >
> >On Thu, Dec 28, 2023 at 5:36 PM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
> >>
> >>
> >>
> >> Am 28. Dezember 2023 14:37:19 MEZ schrieb Simon Glass <sjg at chromium.org>:
> >> >Hi Ilias,
> >> >
> >> >On Wed, Dec 27, 2023 at 11:12 AM Ilias Apalodimas
> >> ><ilias.apalodimas at linaro.org> wrote:
> >> >>
> >> >> Hi Simon,
> >> >>
> >> >> I commented on v3 as well, but in case you miss that
> >> >>
> >> >> On Wed, 27 Dec 2023 at 09:40, Simon Glass <sjg at chromium.org> wrote:
> >> >> >
> >> >> > All callers handle this alignment, so drop the unnecessary code. This
> >> >> > simplifies things a little.
> >> >> >
> >> >> > Signed-off-by: Simon Glass <sjg at chromium.org>
> >> >> > Reviewed-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> >> >> > ---
> >> >> >
> >> >> > (no changes since v1)
> >> >> >
> >> >> > include/smbios.h | 5 +----
> >> >> > lib/smbios.c | 2 --
> >> >> > 2 files changed, 1 insertion(+), 6 deletions(-)
> >> >> >
> >> >> > diff --git a/include/smbios.h b/include/smbios.h
> >> >> > index 77be58887a2..879b8a814b8 100644
> >> >> > --- a/include/smbios.h
> >> >> > +++ b/include/smbios.h
> >> >> > @@ -258,12 +258,9 @@ static inline void fill_smbios_header(void *table, int type,
> >> >> > *
> >> >> > * This writes SMBIOS table at a given address.
> >> >> > *
> >> >> > - * @addr: start address to write SMBIOS table. If this is not
> >> >> > - * 16-byte-aligned then it will be aligned before the table is
> >> >> > - * written.
> >> >> > + * @addr: start address to write SMBIOS table (must be 16-byte-aligned)
> >> >> > * Return: end address of SMBIOS table (and start address for next entry)
> >> >> > * or NULL in case of an error
> >> >> > - *
> >> >> > */
> >> >> > ulong write_smbios_table(ulong addr);
> >> >> >
> >> >> > diff --git a/lib/smbios.c b/lib/smbios.c
> >> >> > index 7f79d969c92..cfd451e4088 100644
> >> >> > --- a/lib/smbios.c
> >> >> > +++ b/lib/smbios.c
> >> >> > @@ -563,8 +563,6 @@ ulong write_smbios_table(ulong addr)
> >> >> > ctx.dev = NULL;
> >> >> > }
> >> >> >
> >> >> > - /* 16 byte align the table address */
> >> >> > - addr = ALIGN(addr, 16);
> >> >>
> >> >> I think this is wrong. It will break SMBIOS on a user error. I am
> >> >> fine replacing that with a check instead and error out if the address
> >> >> is not 16b aligned
> >> >
> >> >Well this is why the comment says it must be aligned. This function is
> >> >not called willy nilly,from code we control. Checking for alignment
> >> >at runtime creates confusion and adds to code size.
> >>
> >> The SMBIOS tables themself have no alignment requirement. Only on non UEFI x86 system presenting a UEFI entry point in the range 000F0000h to 000FFFFFh this copy of the entry point has to be 16 byte aligned.
> >
Thanks Heinrich, this makes sense
> >OK. So perhaps I should reword the comment to say that any
> >arch-specific alignment must be respected by the caller?
>
> Just mentioning the requirement from the spec in the function description should be good enough.
>
> Best regards
>
> Heinrich
>
> >
> >Regards,
> >Simon
Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
More information about the U-Boot
mailing list