bootstage: Allow counting memory without strings

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>
This commit is contained in:
Simon Glass 2024-10-21 10:19:28 +02:00 committed by Tom Rini
parent 040ab117c7
commit 48008ec711
3 changed files with 13 additions and 10 deletions

View 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);

View 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;
}

View 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;
}