]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
bootstage: Allow counting memory without strings
authorSimon Glass <sjg@chromium.org>
Mon, 21 Oct 2024 08:19:28 +0000 (10:19 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 25 Oct 2024 20:22:24 +0000 (14:22 -0600)
The bootstage array includes pointers to strings but not the strings
themselves. The strings are added when stashing, but including them in
the size calculation gives an inflated view of the amount of space used
by the array.

Update this function so it can return the amount of memory used by the
bootstage structures themselves, without the strings which they point
to.

Signed-off-by: Simon Glass <sjg@chromium.org>
common/board_f.c
common/bootstage.c
include/bootstage.h

index a87411ee350aa29f0e76721d201465c0c6d737f2..98dc2591e1d0a8846bca27f20c1eda97c518996e 100644 (file)
@@ -582,7 +582,7 @@ static int reserve_fdt(void)
 static int reserve_bootstage(void)
 {
 #ifdef CONFIG_BOOTSTAGE
-       int size = bootstage_get_size();
+       int size = bootstage_get_size(true);
 
        gd->start_addr_sp = reserve_stack_aligned(size);
        gd->boardf->new_bootstage = map_sysmem(gd->start_addr_sp, size);
index dd6aed7c2fd4aa73f70b4812deee813856c29697..c7bb204501a91fd6823313af075cc10ae1d4bf75 100644 (file)
@@ -520,17 +520,19 @@ int _bootstage_unstash_default(void)
 }
 #endif
 
-int bootstage_get_size(void)
+int bootstage_get_size(bool add_strings)
 {
-       struct bootstage_data *data = gd->bootstage;
-       struct bootstage_record *rec;
        int size;
-       int i;
 
        size = sizeof(struct bootstage_data);
-       for (rec = data->record, i = 0; i < data->rec_count;
-            i++, rec++)
-               size += strlen(rec->name) + 1;
+       if (add_strings) {
+               struct bootstage_data *data = gd->bootstage;
+               struct bootstage_record *rec;
+               int i;
+
+               for (rec = data->record, i = 0; i < data->rec_count; i++, rec++)
+                       size += strlen(rec->name) + 1;
+       }
 
        return size;
 }
index 57792648c4909e1bf8c791f9d95ab4187aff58e9..3300ca0248a3206467551e5f59ad96c46a64745f 100644 (file)
@@ -371,9 +371,10 @@ int bootstage_unstash(const void *base, int size);
 /**
  * bootstage_get_size() - Get the size of the bootstage data
  *
+ * @add_strings: true to add the size of attached strings (for stashing)
  * Return: size of boostage data in bytes
  */
-int bootstage_get_size(void);
+int bootstage_get_size(bool add_strings);
 
 /**
  * bootstage_init() - Prepare bootstage for use
@@ -444,7 +445,7 @@ static inline int bootstage_unstash(const void *base, int size)
        return 0;       /* Pretend to succeed */
 }
 
-static inline int bootstage_get_size(void)
+static inline int bootstage_get_size(bool add_strings)
 {
        return 0;
 }