[PATCH 05/14] initcall: Adjust the failure message and return value

Simon Glass sjg at chromium.org
Tue Aug 6 23:50:39 CEST 2024


Hi Michal,

On Fri, 2 Aug 2024 at 03:21, Michal Simek <michal.simek at amd.com> wrote:
>
> Hi Simon,
>
> On 3/22/24 11:22, Michal Simek wrote:
> > Hi Simon,
> >
> > út 22. 8. 2023 v 5:18 odesílatel Simon Glass <sjg at chromium.org
> > <mailto:sjg at 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 <sjg at chromium.org <mailto:sjg at 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.
>
> Any comment on this one?

Yes it was fixed by this, I believe, although no Fixes tag unfortunately:
7554388c1d1 initcall: break loop immediately on failure

Regards,
Simon


More information about the U-Boot mailing list