[U-Boot] [PATCH] malloc: Use malloc simple before malloc is fully initialized in memalign()

Simon Glass sjg at chromium.org
Fri May 25 03:33:18 UTC 2018


Hi,

On 24 May 2018 at 21:24, Ley Foon Tan <lftan.linux at gmail.com> wrote:
>
> On Thu, May 24, 2018 at 12:33 AM, Simon Glass <sjg at chromium.org> wrote:
> > Hi,
> >
> > On 23 May 2018 at 00:32, Ley Foon Tan <lftan.linux at gmail.com> wrote:
> >> On Sat, May 19, 2018 at 10:37 PM, Simon Glass <sjg at chromium.org> wrote:
> >>> Hi Ley,
> >>>
> >>> On 18 May 2018 at 04:03, Ley Foon Tan <ley.foon.tan at intel.com> wrote:
> >>>> Follow implementation in mALLOc(). Check GD_FLG_FULL_MALLOC_INIT flag and use
> >>>> malloc_simple if GD_FLG_FULL_MALLOC_INIT is unset. Adjust the malloc bytes
> >>>> to align with the requested alignment.
> >>>>
> >>>> The original memalign() function will access mchunkptr struct to adjust the
> >>>> alignment if there is misalignment happen, but mchunkptr struct is not being
> >>>> initialized before full malloc is initialized. This cause the system crash.
> >>>>
> >>>> Signed-off-by: Ley Foon Tan <ley.foon.tan at intel.com>
> >>>> ---
> >>>>  common/dlmalloc.c |    7 +++++++
> >>>>  1 files changed, 7 insertions(+), 0 deletions(-)
> >>>>
> >>>> diff --git a/common/dlmalloc.c b/common/dlmalloc.c
> >>>> index b395eef..edaad29 100644
> >>>> --- a/common/dlmalloc.c
> >>>> +++ b/common/dlmalloc.c
> >>>> @@ -1891,6 +1891,13 @@ Void_t* mEMALIGn(alignment, bytes) size_t alignment; size_t bytes;
> >>>>
> >>>>    if ((long)bytes < 0) return NULL;
> >>>>
> >>>> +#if CONFIG_VAL(SYS_MALLOC_F_LEN)
> >>>
> >>> How about:
> >>>
> >>> if (IS_ENABLED(CONFIG_SYS_MALLOC_F))
> >>
> >> I think this is the reason it uses #if CONFIG_VAL(SYS_MALLOC_F_LEN),
> >> same for malloc().
> >>
> >> "spl: make SPL and normal u-boot stage use independent SYS_MALLOC_F_LEN"
> >>
> >> http://git.denx.de/?p=u-boot.git;a=commit;h=f1896c45cb2f7d8dbed27e784a6459a129fc0762
> >
> > So how about
> >
> > if (CONFIG_IS_ENABLED(SYS_MALLOC_F_LEN)
> >
> > Or you could use #if if you need to
>
> Tested both #if (CONFIG_IS_ENABLED(SYS_MALLOC_F_LEN)) and if
> (CONFIG_IS_ENABLED(SYS_MALLOC_F_LEN)), both are not working.

Sorry I mean

CONFIG_IS_ENABLED(SYS_MALLOC_F)

That tells you whether the feature is enabled in U-Boot or SPL.

>
> It will not go into this code.
>
>
> >
> > To me it seems better to use the setting itself (i.e. whether the
> > pre-reloc malloc() is enabled) rather than one of its parameters (the
> > size of the region).

[..]

Regards,
Simon


More information about the U-Boot mailing list