Hi Przemyslaw, > This commit introduces new config: CONFIG_SYS_MALLOC_CLEAR_ON_INIT. > > This config is an expert option and is enabled by default. > > The all amount of memory reserved for the malloc, is by default set > to zero in mem_malloc_init(). When the malloc reserved memory exceeds > few MiB, then the boot process can slow down. > > So disabling this config, is an expert option to reduce the boot time, > and can be disabled by Kconfig. > > Note: > After disable this option, only calloc() will return the pointer > to the 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. > > Signed-off-by: Przemyslaw Marczak <[email protected]> > Reviewed-by: Simon Glass <[email protected]> > > --- > Changes v3: > - squash the commit with the Kconfig option > > Changes v4: > - adjust commit message for the new config > > Changes v5: > - change config name to CONFIG_SYS_MALLOC_CLEAR_ON_INIT > --- > Kconfig | 32 +++++++++++++++++++++++++------- > common/dlmalloc.c | 10 +++++++--- > 2 files changed, 32 insertions(+), 10 deletions(-) > > diff --git a/Kconfig b/Kconfig > index 75bab7f..d6c75d5 100644 > --- a/Kconfig > +++ b/Kconfig > @@ -76,13 +76,31 @@ config SYS_MALLOC_F_LEN > initial serial device and any others that are needed. > > menuconfig EXPERT > - bool "Configure standard U-Boot features (expert users)" > - help > - This option allows certain base U-Boot options and settings > - to be disabled or tweaked. This is for specialized > - environments which can tolerate a "non-standard" U-Boot. > - Only use this if you really know what you are doing. > - > + bool "Configure standard U-Boot features (expert users)" > + default y > + help > + This option allows certain base U-Boot options and settings > + to be disabled or tweaked. This is for specialized > + environments which can tolerate a "non-standard" U-Boot. > + Only use this if you really know what you are doing. > + > +if EXPERT > + config SYS_MALLOC_CLEAR_ON_INIT > + bool "Init with zeros the memory reserved for malloc (slow)" > + default y > + help > + This setting is enabled by default. The reserved malloc > + memory is initialized with zeros, so first malloc calls > + will return the pointer to the zeroed memory. But this > + slows the boot time. > + > + It is recommended to disable it, when CONFIG_SYS_MALLOC_LEN > + value, has more than few MiB, e.g. when uses bzip2 or bmp > logo. > + Then the boot time can be significantly reduced. > + Warning: > + When disabling this, please check if malloc calls, maybe > + should be replaced by calloc - if expects zeroed memory. > +endif > endmenu # General setup > > menu "Boot images" > diff --git a/common/dlmalloc.c b/common/dlmalloc.c > index 6453ee9..b2ce063 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); > - > +#ifdef CONFIG_SYS_MALLOC_CLEAR_ON_INIT > + 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 */ > +#ifdef CONFIG_SYS_MALLOC_CLEAR_ON_INIT > #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); > > +#ifdef CONFIG_SYS_MALLOC_CLEAR_ON_INIT > #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;
Acked-by: Lukasz Majewski <[email protected]> -- Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

