[PATCH] board_init: Do not reserve MALLOC_F area on stack if non-zero MALLOC_F_ADDR

Tom Rini trini at konsulko.com
Thu Jun 30 15:36:31 CEST 2022


On Thu, Jun 30, 2022 at 04:06:22AM -0600, Simon Glass wrote:
> Hi Marek,
> 
> On Sat, 25 Jun 2022 at 11:58, Marek Vasut <marex at denx.de> wrote:
> >
> > In case the MALLOC_F_ADDR is set to non-zero value, the early malloc area is
> > not going to be placed just below stack top, but elsewhere. Do not reserve
> > MALLOC_F bytes in this case, as that wastes stack space and may even cause
> > insufficient stack space in SPL.
> >
> > This functionality is particularly useful on i.MX8M, where the insufficient
> > stack space can be triggered.
> >
> > Signed-off-by: Marek Vasut <marex at denx.de>
> > Cc: Albert ARIBAUD <albert.u.boot at aribaud.net>
> > Cc: Fabio Estevam <festevam at denx.de>
> > Cc: Peng Fan <peng.fan at nxp.com>
> > Cc: Simon Glass <sjg at chromium.org>
> > Cc: Stefano Babic <sbabic at denx.de>
> > Cc: Thomas Chou <thomas at wytron.com.tw>
> > Cc: Tom Rini <trini at konsulko.com>
> > ---
> >  common/init/board_init.c | 2 ++
> >  1 file changed, 2 insertions(+)
> 
> Please can you migrate the option to Kconfig first? I suspect that
> will simplify the logic and avoid the #ifndef

That was my first reaction as well.   But, I'm not so sure after looking
at things more.  An issue is that CONFIG_MALLOC_F_ADDR should probably
be CONFIG_SPL_MALLOC_F_ADDR as it's only used in SPL.  But it's also not
an either/or around CONFIG_SPL_SYS_MALLOC_F_LEN.

It would be good to move to Kconfig (but I also don't see a common
default for the handful of SoCs using it), and maybe a !CONFIG_VAL()
test instead of ifndef.

> 
> >
> > diff --git a/common/init/board_init.c b/common/init/board_init.c
> > index eab5ee13953..6a550261778 100644
> > --- a/common/init/board_init.c
> > +++ b/common/init/board_init.c
> > @@ -78,8 +78,10 @@ __weak void board_init_f_init_stack_protection(void)
> >  ulong board_init_f_alloc_reserve(ulong top)
> >  {
> >         /* Reserve early malloc arena */
> > +#ifndef CONFIG_MALLOC_F_ADDR
> >  #if CONFIG_VAL(SYS_MALLOC_F_LEN)
> >         top -= CONFIG_VAL(SYS_MALLOC_F_LEN);
> > +#endif
> >  #endif
> >         /* LAST : reserve GD (rounded up to a multiple of 16 bytes) */
> >         top = rounddown(top-sizeof(struct global_data), 16);
> > --
> > 2.35.1
> >
> 
> Regards,
> Simon

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20220630/96a4accb/attachment.sig>


More information about the U-Boot mailing list