[PATCH 1/1] boot: print the boot stage id in the report
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Wed Apr 30 16:25:38 CEST 2025
On 30.04.25 15:54, Simon Glass wrote:
> +Michal Simek
>
> Hi Heinrich,
>
> On Wed, 30 Apr 2025 at 03:11, Heinrich Schuchardt
> <heinrich.schuchardt at canonical.com> wrote:
>>
>> An output like the following is not helpful:
>>
>> Timer summary in microseconds (40 records):
>> Mark Elapsed Stage
>> 0 0 reset
>> ...
>> 56,448,158 4,845 fit_image_load
>> 56,448,186 28 fit_image_load
>> 56,448,187 1 fit_image_load
>> 56,451,971 3,784 fit_image_load
>> 56,483,951 31,980 fit_image_load
>> 56,483,956 5 fit_image_load
>> 56,483,984 28 fit_image_load
>> 56,484,001 17 fit_image_load
>> 56,484,008 7 fit_image_load
>>
>> It provides no clue about what is happening in the fit_image_load stage.
>>
>> Add the bootstage ID to the report. Now we get:
>>
>> Timer summary in microseconds (40 records):
>> Mark Elapsed ID Stage
>> 0 0 171 reset
>> 3,181,017 3,181,017 178 board_init_f
>> 3,229,282 48,265 179 board_init_r
>> 4,184,866 955,584 64 eth_common_init
>> 4,280,304 95,438 65 eth_initialize
>> 4,284,509 4,205 186 main_loop
>> 4,390,704 106,195 180 usb_start
>> 5,694,146 1,303,442 187 cli_loop
>> 59,908,029 54,213,883 184 bootm_start
>> 59,908,031 2 1 boot_get_kernel
>> 59,912,875 4,844 100 fit_image_load
>> 59,912,903 28 101 fit_image_load
>> 59,912,904 1 102 fit_image_load
>> 59,916,688 3,784 110 fit_image_load
>> 59,948,668 31,980 105 fit_image_load
>> 59,948,673 5 106 fit_image_load
>> ...
>>
>> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
>> ---
>> common/bootstage.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/common/bootstage.c b/common/bootstage.c
>> index 4532100acea..0810c4e5271 100644
>> --- a/common/bootstage.c
>> +++ b/common/bootstage.c
>> @@ -254,7 +254,7 @@ static uint32_t print_time_record(struct bootstage_record *rec, uint32_t prev)
>> print_grouped_ull(rec->time_us, BOOTSTAGE_DIGITS);
>> print_grouped_ull(rec->time_us - prev, BOOTSTAGE_DIGITS);
>> }
>> - printf(" %s\n", get_record_name(buf, sizeof(buf), rec));
>> + printf(" %4u %s\n", rec->id, get_record_name(buf, sizeof(buf), rec));
>>
>> return rec->time_us;
>> }
>> @@ -333,7 +333,7 @@ void bootstage_report(void)
>>
>> printf("Timer summary in microseconds (%d records):\n",
>> data->rec_count);
>> - printf("%11s%11s %s\n", "Mark", "Elapsed", "Stage");
>> + printf("%11s%11s %4s %s\n", "Mark", "Elapsed", "ID", "Stage");
>>
>> prev = print_time_record(rec, 0);
>>
>> --
>> 2.48.1
>
> This is largely a revert of [1] so you should mention that, at least
> and cc the author.
There isn't anything reverting [1] in my patch.
>
> When I wrote the bootstage feature[2], Wolfgang asked me to replace
> the old show_boot_progress() which used an integer. The whole series
> was done with very tight size constraints.
>
> The function name fit_image_load() is not at all useful in the case
> you are showing.
Booting via bootm is not very exotic.
>
> In this day and age we should add strings, included if BOOTSTAGE is
> enabled, i.e. convert the calls like:
>
> bootstage_mark(bootstage_id + BOOTSTAGE_SUB_CHECK_ARCH);
>
> to
>
> bootstage_mark(bootstage_id, BOOTSTAGE_SUB_CHECK_ARCH)
If the ID is not meant to be accessible to the user, why would we write
it to the records at all?
Best regards
Heinrich
>
> and have it create a string comprising the base ID and the sub-ID,
> e.g. "kernel: check arch"
>
> Regards,
> Simon
>
> [1] 55bc22760c3 bootstage: Show func name for bootstage_mark/error
> [2] 770605e4f98 bootstage: Replace show_boot_progress/error() with
> bootstage_...()
More information about the U-Boot
mailing list