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

Michal Simek michal.simek at amd.com
Wed Aug 7 08:06:16 CEST 2024



On 8/6/24 23:50, Simon Glass wrote:
> 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

perfect.

Thanks,
Michal




More information about the U-Boot mailing list