From mboxrd@z Thu Jan 1 00:00:00 1970 From: Przemyslaw Marczak Date: Fri, 20 Feb 2015 18:08:20 +0100 Subject: [U-Boot] [PATCH v3 4/6] dlmalloc: add option for skip memset in malloc init In-Reply-To: <20150220215230.DDC4.AA925319@jp.panasonic.com> References: <1424430379-12599-1-git-send-email-p.marczak@samsung.com> <1424430379-12599-5-git-send-email-p.marczak@samsung.com> <20150220215230.DDC4.AA925319@jp.panasonic.com> Message-ID: <54E76A04.9070306@samsung.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello, On 02/20/2015 01:52 PM, Masahiro Yamada wrote: > Hi Przemyslaw, > > > On Fri, 20 Feb 2015 12:06:17 +0100 > Przemyslaw Marczak 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. >> >> This option can be enabled by Kconfig. >> >> 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. >> >> Signed-off-by: Przemyslaw Marczak >> Reviewed-by: Simon Glass >> >> --- >> Changes v3: >> - squash the commit with the Kconfig option >> --- >> Kconfig | 26 +++++++++++++++++++------- >> common/dlmalloc.c | 10 +++++++--- >> 2 files changed, 26 insertions(+), 10 deletions(-) >> >> diff --git a/Kconfig b/Kconfig >> index 75bab7f..87d4daf 100644 >> --- a/Kconfig >> +++ b/Kconfig >> @@ -76,13 +76,25 @@ 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)" >> + 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_INIT_SKIP_ZEROING >> + bool "Skip memset at malloc init (reduce boot time)" >> + help >> + This avoids zeroing memory reserved for malloc at malloc init. >> + Significant boot time reduction is visible for configs in which >> + CONFIG_SYS_MALLOC_LEN value, has more than few MiB. >> + Useful for bzip2, bmp logo. >> + Warning: >> + When enabling 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..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; > > > You are adding only "ifndef" conditionals. > > IMHO, > Isn't "#ifdef CONFIG_SYS_MALLOC_INIT_ZEROING" better? > (Generally speaking, CONFIG options that disable a feature are not preferable.) > > You also need to add "default y" to the Kconfig > and add "# CONIFG_SYS_MALLOC_INIT_ZEROING is not set" to your defconfig. > > > Best Regards > Masahiro Yamada > Ok, will change this to positive. Best regards, -- Przemyslaw Marczak Samsung R&D Institute Poland Samsung Electronics p.marczak at samsung.com