Hi Simon,

Ășt 22. 8. 2023 v 5:18 odesĂ­latel Simon Glass <s...@chromium.org> napsal:

> Move the failure message outside the loop, so it is easier to follow the
> code. Avoid swallowing the error code - just pass it along.
>
> Drop the initcall-list address from the output. This is confusing since
> we show two addresses. Really it is only the function address which is
> useful, since it can be looked up in the map, e.g. with:
>
>    grep -A1 -B1 serial_init u-boot.map
>
> Signed-off-by: Simon Glass <s...@chromium.org>
> ---
>
>  lib/initcall.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/lib/initcall.c b/lib/initcall.c
> index 81c5d2450735..0f74cef32f85 100644
> --- a/lib/initcall.c
> +++ b/lib/initcall.c
> @@ -46,11 +46,13 @@ int initcall_run_list(const init_fnc_t init_sequence[])
>                 }
>
>                 ret = func();
> -               if (ret) {
> -                       printf("initcall sequence %p failed at call %p
> (err=%d)\n",
> -                              init_sequence, (char *)func - reloc_ofs,
> ret);
> -                       return -1;
> -               }
> +       }
> +
> +       if (ret) {
> +               printf("initcall failed at call %p (err=%dE)\n",
> +                      (char *)func - reloc_ofs, ret);
> +
> +               return ret;
>         }
>
>         return 0;
> --
> 2.42.0.rc1.204.g551eb34607-goog
>
>
I am debugging one issue and I get output like this. And I dig into it and
find out that failures are not reported
on the function which is causing it but on the next one. It is because of
pointer is moved to next function;

This is what I see.
initcall: 0000000008072de8, 0
initcall failed at call 000000000802b14c (err=-19)

And this is the problematic part.
for (ptr = init_sequence; func = *ptr, !ret && func; ptr++) {

Fix should be of course to get that if(ret) code back but maybe you want to
see different solution.

Thanks,
Michal

-- 
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP/Versal SoCs

Reply via email to