From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ley Foon Tan Date: Fri, 25 May 2018 16:50:57 +0800 Subject: [U-Boot] [PATCH] malloc: Use malloc simple before malloc is fully initialized in memalign() In-Reply-To: References: <1526637792-33233-1-git-send-email-ley.foon.tan@intel.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Fri, May 25, 2018 at 11:33 AM, Simon Glass wrote: > Hi, > > On 24 May 2018 at 21:24, Ley Foon Tan wrote: >> >> On Thu, May 24, 2018 at 12:33 AM, Simon Glass wrote: >> > Hi, >> > >> > On 23 May 2018 at 00:32, Ley Foon Tan wrote: >> >> On Sat, May 19, 2018 at 10:37 PM, Simon Glass wrote: >> >>> Hi Ley, >> >>> >> >>> On 18 May 2018 at 04:03, Ley Foon Tan 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 >> >>>> --- >> >>>> 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. #if CONFIG_IS_ENABLED(SYS_MALLOC_F) if not working in SPL build. CONFIG_IS_ENABLED() expects config with "y" or "m", but SPL config is with "1". Need to use #ifdef CONFIG_SYS_MALLOC_F. Do you want to change to this? Regards Ley Foon