diff mbox

[U-Boot,3/7] malloc_simple: Add Kconfig option for using only malloc_simple in the SPL

Message ID 1442158965-29962-4-git-send-email-hdegoede@redhat.com
State Accepted
Delegated to: Hans de Goede
Headers show

Commit Message

Hans de Goede Sept. 13, 2015, 3:42 p.m. UTC
common/dlmalloc.c is quite big, both in .text and .data usage, therefor
on some boards the SPL is build to use only malloc_simple.c and not the
dlmalloc.c code. This is done in various include/configs/foo.h with the
following construct:

This commit introduces a SPL_MALLOC_SIMPLE Kconfig bool which allows
selecting this functionality through Kconfig instead.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 Kconfig                | 10 ++++++++++
 common/malloc_simple.c |  3 ++-
 include/_exports.h     |  3 ++-
 include/exports.h      |  3 ++-
 include/malloc.h       |  3 ++-
 5 files changed, 18 insertions(+), 4 deletions(-)

Comments

Simon Glass Sept. 22, 2015, 4 a.m. UTC | #1
Hi Hans,

On 13 September 2015 at 09:42, Hans de Goede <hdegoede@redhat.com> wrote:
> common/dlmalloc.c is quite big, both in .text and .data usage, therefor
> on some boards the SPL is build to use only malloc_simple.c and not the
> dlmalloc.c code. This is done in various include/configs/foo.h with the
> following construct:
>

Was there a '#' at the start of this missing line?

> This commit introduces a SPL_MALLOC_SIMPLE Kconfig bool which allows
> selecting this functionality through Kconfig instead.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  Kconfig                | 10 ++++++++++
>  common/malloc_simple.c |  3 ++-
>  include/_exports.h     |  3 ++-
>  include/exports.h      |  3 ++-
>  include/malloc.h       |  3 ++-
>  5 files changed, 18 insertions(+), 4 deletions(-)
>
> diff --git a/Kconfig b/Kconfig
> index 05a34f7..0ae4fab 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -114,6 +114,16 @@ config SPL
>         help
>           If you want to build SPL as well as the normal image, say Y.
>
> +config SPL_MALLOC_SIMPLE

If you made it SPL_SYS_MALLOC_SIMPLE...

> +       bool
> +       depends on SPL
> +       prompt "Only use malloc_simple functions in the spl"
> +       help
> +         Say Y here to only use the *_simple malloc functions from
> +         malloc_simple.c, rather then using the versions from dlmalloc.c
> +         this will make the SPL binary smaller at the cost of more heap
> +         usage as the *_simple malloc functions do not re-use free-ed mem.
> +
>  config SPL_STACK_R
>         depends on SPL
>         bool "Enable SDRAM location for SPL stack"
> diff --git a/common/malloc_simple.c b/common/malloc_simple.c
> index c745863..e9c1eaa 100644
> --- a/common/malloc_simple.c
> +++ b/common/malloc_simple.c
> @@ -40,7 +40,8 @@ void *memalign_simple(size_t align, size_t bytes)
>         return ptr;
>  }
>
> -#ifdef CONFIG_SYS_MALLOC_SIMPLE
> +#if (defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) || \
> +    (defined CONFIG_SYS_MALLOC_SIMPLE)

then I think this could become:

#if CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE)

>  void *calloc(size_t nmemb, size_t elem_size)
>  {
>         size_t size = nmemb * elem_size;
> diff --git a/include/_exports.h b/include/_exports.h
> index 74a882a..f811c5d 100644
> --- a/include/_exports.h
> +++ b/include/_exports.h
> @@ -23,7 +23,8 @@
>         EXPORT_FUNC(dummy, void, free_hdlr, void)
>  #endif
>         EXPORT_FUNC(malloc, void *, malloc, size_t)
> -#ifndef CONFIG_SYS_MALLOC_SIMPLE
> +#if !(defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) && \
> +    !(defined CONFIG_SYS_MALLOC_SIMPLE)
>         EXPORT_FUNC(free, void, free, void *)
>  #endif
>         EXPORT_FUNC(udelay, void, udelay, unsigned long)
> diff --git a/include/exports.h b/include/exports.h
> index a3e0469..8171b31 100644
> --- a/include/exports.h
> +++ b/include/exports.h
> @@ -19,7 +19,8 @@ int printf(const char* fmt, ...);
>  void install_hdlr(int, interrupt_handler_t, void*);
>  void free_hdlr(int);
>  void *malloc(size_t);
> -#ifndef CONFIG_SYS_MALLOC_SIMPLE
> +#if !(defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) && \
> +    !(defined CONFIG_SYS_MALLOC_SIMPLE)
>  void free(void*);
>  #endif
>  void __udelay(unsigned long);
> diff --git a/include/malloc.h b/include/malloc.h
> index f4da9e6..e5592fc 100644
> --- a/include/malloc.h
> +++ b/include/malloc.h
> @@ -872,7 +872,8 @@ extern Void_t*     sbrk();
>
>  #else
>
> -#ifdef CONFIG_SYS_MALLOC_SIMPLE
> +#if (defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) || \
> +    (defined CONFIG_SYS_MALLOC_SIMPLE)
>  #define malloc malloc_simple
>  #define realloc realloc_simple
>  #define memalign memalign_simple
> --
> 2.4.3
>

Regards,
Simon
Hans de Goede Sept. 22, 2015, 9:38 a.m. UTC | #2
Hi,

On 22-09-15 06:00, Simon Glass wrote:
> Hi Hans,
>
> On 13 September 2015 at 09:42, Hans de Goede <hdegoede@redhat.com> wrote:
>> common/dlmalloc.c is quite big, both in .text and .data usage, therefor
>> on some boards the SPL is build to use only malloc_simple.c and not the
>> dlmalloc.c code. This is done in various include/configs/foo.h with the
>> following construct:
>>
>
> Was there a '#' at the start of this missing line?

Yep, I keep falling over git commit eating up any lines starting with
a # when quoting code snippets in commit messages...

I will fix this and send a v2.

>> This commit introduces a SPL_MALLOC_SIMPLE Kconfig bool which allows
>> selecting this functionality through Kconfig instead.
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>>   Kconfig                | 10 ++++++++++
>>   common/malloc_simple.c |  3 ++-
>>   include/_exports.h     |  3 ++-
>>   include/exports.h      |  3 ++-
>>   include/malloc.h       |  3 ++-
>>   5 files changed, 18 insertions(+), 4 deletions(-)
>>
>> diff --git a/Kconfig b/Kconfig
>> index 05a34f7..0ae4fab 100644
>> --- a/Kconfig
>> +++ b/Kconfig
>> @@ -114,6 +114,16 @@ config SPL
>>          help
>>            If you want to build SPL as well as the normal image, say Y.
>>
>> +config SPL_MALLOC_SIMPLE
>
> If you made it SPL_SYS_MALLOC_SIMPLE...
>
>> +       bool
>> +       depends on SPL
>> +       prompt "Only use malloc_simple functions in the spl"
>> +       help
>> +         Say Y here to only use the *_simple malloc functions from
>> +         malloc_simple.c, rather then using the versions from dlmalloc.c
>> +         this will make the SPL binary smaller at the cost of more heap
>> +         usage as the *_simple malloc functions do not re-use free-ed mem.
>> +
>>   config SPL_STACK_R
>>          depends on SPL
>>          bool "Enable SDRAM location for SPL stack"
>> diff --git a/common/malloc_simple.c b/common/malloc_simple.c
>> index c745863..e9c1eaa 100644
>> --- a/common/malloc_simple.c
>> +++ b/common/malloc_simple.c
>> @@ -40,7 +40,8 @@ void *memalign_simple(size_t align, size_t bytes)
>>          return ptr;
>>   }
>>
>> -#ifdef CONFIG_SYS_MALLOC_SIMPLE
>> +#if (defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) || \
>> +    (defined CONFIG_SYS_MALLOC_SIMPLE)
>
> then I think this could become:
>
> #if CONFIG_IS_ENABLED(SYS_MALLOC_SIMPLE)

I think you're right, good one. I'll give this a spin and
if it works include the change in V2.

>>   void *calloc(size_t nmemb, size_t elem_size)
>>   {
>>          size_t size = nmemb * elem_size;
>> diff --git a/include/_exports.h b/include/_exports.h
>> index 74a882a..f811c5d 100644
>> --- a/include/_exports.h
>> +++ b/include/_exports.h
>> @@ -23,7 +23,8 @@
>>          EXPORT_FUNC(dummy, void, free_hdlr, void)
>>   #endif
>>          EXPORT_FUNC(malloc, void *, malloc, size_t)
>> -#ifndef CONFIG_SYS_MALLOC_SIMPLE
>> +#if !(defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) && \
>> +    !(defined CONFIG_SYS_MALLOC_SIMPLE)
>>          EXPORT_FUNC(free, void, free, void *)
>>   #endif
>>          EXPORT_FUNC(udelay, void, udelay, unsigned long)
>> diff --git a/include/exports.h b/include/exports.h
>> index a3e0469..8171b31 100644
>> --- a/include/exports.h
>> +++ b/include/exports.h
>> @@ -19,7 +19,8 @@ int printf(const char* fmt, ...);
>>   void install_hdlr(int, interrupt_handler_t, void*);
>>   void free_hdlr(int);
>>   void *malloc(size_t);
>> -#ifndef CONFIG_SYS_MALLOC_SIMPLE
>> +#if !(defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) && \
>> +    !(defined CONFIG_SYS_MALLOC_SIMPLE)
>>   void free(void*);
>>   #endif
>>   void __udelay(unsigned long);
>> diff --git a/include/malloc.h b/include/malloc.h
>> index f4da9e6..e5592fc 100644
>> --- a/include/malloc.h
>> +++ b/include/malloc.h
>> @@ -872,7 +872,8 @@ extern Void_t*     sbrk();
>>
>>   #else
>>
>> -#ifdef CONFIG_SYS_MALLOC_SIMPLE
>> +#if (defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) || \
>> +    (defined CONFIG_SYS_MALLOC_SIMPLE)
>>   #define malloc malloc_simple
>>   #define realloc realloc_simple
>>   #define memalign memalign_simple
>> --
>> 2.4.3
>>
>
> Regards,
> Simon
>

Regards,

Hans
diff mbox

Patch

diff --git a/Kconfig b/Kconfig
index 05a34f7..0ae4fab 100644
--- a/Kconfig
+++ b/Kconfig
@@ -114,6 +114,16 @@  config SPL
 	help
 	  If you want to build SPL as well as the normal image, say Y.
 
+config SPL_MALLOC_SIMPLE
+	bool
+	depends on SPL
+	prompt "Only use malloc_simple functions in the spl"
+	help
+	  Say Y here to only use the *_simple malloc functions from
+	  malloc_simple.c, rather then using the versions from dlmalloc.c
+	  this will make the SPL binary smaller at the cost of more heap
+	  usage as the *_simple malloc functions do not re-use free-ed mem.
+
 config SPL_STACK_R
 	depends on SPL
 	bool "Enable SDRAM location for SPL stack"
diff --git a/common/malloc_simple.c b/common/malloc_simple.c
index c745863..e9c1eaa 100644
--- a/common/malloc_simple.c
+++ b/common/malloc_simple.c
@@ -40,7 +40,8 @@  void *memalign_simple(size_t align, size_t bytes)
 	return ptr;
 }
 
-#ifdef CONFIG_SYS_MALLOC_SIMPLE
+#if (defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) || \
+    (defined CONFIG_SYS_MALLOC_SIMPLE)
 void *calloc(size_t nmemb, size_t elem_size)
 {
 	size_t size = nmemb * elem_size;
diff --git a/include/_exports.h b/include/_exports.h
index 74a882a..f811c5d 100644
--- a/include/_exports.h
+++ b/include/_exports.h
@@ -23,7 +23,8 @@ 
 	EXPORT_FUNC(dummy, void, free_hdlr, void)
 #endif
 	EXPORT_FUNC(malloc, void *, malloc, size_t)
-#ifndef CONFIG_SYS_MALLOC_SIMPLE
+#if !(defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) && \
+    !(defined CONFIG_SYS_MALLOC_SIMPLE)
 	EXPORT_FUNC(free, void, free, void *)
 #endif
 	EXPORT_FUNC(udelay, void, udelay, unsigned long)
diff --git a/include/exports.h b/include/exports.h
index a3e0469..8171b31 100644
--- a/include/exports.h
+++ b/include/exports.h
@@ -19,7 +19,8 @@  int printf(const char* fmt, ...);
 void install_hdlr(int, interrupt_handler_t, void*);
 void free_hdlr(int);
 void *malloc(size_t);
-#ifndef CONFIG_SYS_MALLOC_SIMPLE
+#if !(defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) && \
+    !(defined CONFIG_SYS_MALLOC_SIMPLE)
 void free(void*);
 #endif
 void __udelay(unsigned long);
diff --git a/include/malloc.h b/include/malloc.h
index f4da9e6..e5592fc 100644
--- a/include/malloc.h
+++ b/include/malloc.h
@@ -872,7 +872,8 @@  extern Void_t*     sbrk();
 
 #else
 
-#ifdef CONFIG_SYS_MALLOC_SIMPLE
+#if (defined CONFIG_SPL_BUILD && defined CONFIG_SPL_MALLOC_SIMPLE) || \
+    (defined CONFIG_SYS_MALLOC_SIMPLE)
 #define malloc malloc_simple
 #define realloc realloc_simple
 #define memalign memalign_simple