On Mon, Oct 06, 2025 at 08:59:48PM -0400, [email protected] wrote:
> From: Chali Anis <[email protected]>
> 
> barebox running under an operating system (or nearly one like UEFI) does
> not have control over all the memory and should not hog too much memory
> upfront as that can interfere with other applications, e.g. EFI drivers
> or the EFI firmware itself.
> 
> To accommodate this use case, allow TLSF to dynamically request more
> memory from an external store via tlsf_register_store().
> 
> Signed-off-by: Ahmad Fatoum <[email protected]>
> Signed-off-by: Chali Anis <[email protected]>
> ---
>  common/tlsf.c  | 29 ++++++++++++++++++++++++++++-
>  include/tlsf.h |  1 +
>  2 files changed, 29 insertions(+), 1 deletion(-)
> 
> diff --git a/common/tlsf.c b/common/tlsf.c
> index 4ee53a9b2f20..636b57b1c642 100644
> --- a/common/tlsf.c
> +++ b/common/tlsf.c
> @@ -159,6 +159,9 @@ typedef struct control_t
>       /* Empty lists point at this block to indicate they are free. */
>       block_header_t block_null;
>  
> +     void (*request_store)(tlsf_t, size_t);
> +
> +

This breaks compilation on 32bit platforms.

The reason is we have this directly under the definition of control_t:

tlsf_static_assert(sizeof(control_t) % ALIGN_SIZE == 0);

I fixed it up as follows.

It looks odd to me that we have to manually align the struct size each
time we add a field to this struct. Isn't there something better?

Sascha

---------------------------8<------------------------------
>From 11fcc69bbc41954d5e28a3b082dc39171bd6cdc0 Mon Sep 17 00:00:00 2001
From: Sascha Hauer <[email protected]>
Date: Tue, 7 Oct 2025 15:39:38 +0200
Subject: [PATCH] fixup! tlsf: support on-demand requesting memory from
 external store

---
 common/tlsf.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/common/tlsf.c b/common/tlsf.c
index 636b57b1c6..c4ba8259b2 100644
--- a/common/tlsf.c
+++ b/common/tlsf.c
@@ -161,11 +161,9 @@ typedef struct control_t
 
        void (*request_store)(tlsf_t, size_t);
 
-
        /* Bitmaps for free lists. */
        unsigned int fl_bitmap;
        unsigned int sl_bitmap[FL_INDEX_COUNT];
-       u32 : BYTES_TO_BITS(ALIGN_SIZE - sizeof(size_t));
 
        /* Head of free lists. */
        block_header_t* blocks[FL_INDEX_COUNT][SL_INDEX_COUNT];
-- 
2.47.3


-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

Reply via email to