[U-Boot] [PATCH v2 4/8] dlmalloc: add option for skip memset in malloc init

Simon Glass sjg at chromium.org
Wed Feb 18 05:32:10 CET 2015


Hi Przemyslaw,

On 16 February 2015 at 08:13, Przemyslaw Marczak <p.marczak at samsung.com> wrote:
> This commit introduces new config: CONFIG_SYS_MALLOC_INIT_SKIP_ZEROING.
>
> Before this change, the all amount of memory reserved for the malloc,
> was set to zero in mem_malloc_init(). When the malloc reserved memory
> exceeds few MiB, then the boot process can slow down.
>
> So enabling this config, is an option to reduce the boot time.
>
> Note:
> After enable this option, only calloc() will return the pointer to zeroed
> memory area. Previously, without this option, the memory pointed to untouched
> malloc memory region, was filled with zeros. So it means, that code with
> malloc() calls should be reexamined.

Can this go in Kconfig somewhere?

>
> Signed-off-by: Przemyslaw Marczak <p.marczak at samsung.com>
> ---
>  common/dlmalloc.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/common/dlmalloc.c b/common/dlmalloc.c
> index 6453ee9..63f68ed 100644
> --- a/common/dlmalloc.c
> +++ b/common/dlmalloc.c
> @@ -1535,9 +1535,9 @@ void mem_malloc_init(ulong start, ulong size)
>
>         debug("using memory %#lx-%#lx for malloc()\n", mem_malloc_start,
>               mem_malloc_end);
> -
> -       memset((void *)mem_malloc_start, 0, size);
> -
> +#ifndef CONFIG_SYS_MALLOC_INIT_SKIP_ZEROING
> +       memset((void *)mem_malloc_start, 0x0, size);
> +#endif
>         malloc_bin_reloc();
>  }
>
> @@ -2948,10 +2948,12 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size;
>
>
>    /* check if expand_top called, in which case don't need to clear */
> +#ifndef CONFIG_SYS_MALLOC_INIT_SKIP_ZEROING
>  #if MORECORE_CLEARS
>    mchunkptr oldtop = top;
>    INTERNAL_SIZE_T oldtopsize = chunksize(top);
>  #endif
> +#endif
>    Void_t* mem = mALLOc (sz);
>
>    if ((long)n < 0) return NULL;
> @@ -2977,6 +2979,7 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size;
>
>      csz = chunksize(p);
>
> +#ifndef CONFIG_SYS_MALLOC_INIT_SKIP_ZEROING
>  #if MORECORE_CLEARS
>      if (p == oldtop && csz > oldtopsize)
>      {
> @@ -2984,6 +2987,7 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size;
>        csz = oldtopsize;
>      }
>  #endif
> +#endif
>
>      MALLOC_ZERO(mem, csz - SIZE_SZ);
>      return mem;
> --
> 1.9.1
>

Regards,
Simon


More information about the U-Boot mailing list