Message ID | 1365863234-22906-1-git-send-email-sjg@chromium.org |
---|---|
State | Rejected |
Delegated to: | Simon Glass |
Headers | show |
Dear Simon Glass, In message <1365863234-22906-1-git-send-email-sjg@chromium.org> you wrote: > The debug() which prints out the current call is not very useful, since if > it is called early enough (such as before the console is ready in the > pre-relocation board_init_f() sequence) it can hang the board. This should not happen (and if it does, that wouldbe a bug that needs fixing). > It is more useful to print a message when a call fails, and in this case > the non-relocated symbol address provides a way for the offending function > to be located in System.map. No. it is a long styanding rule that for this tyoe of actions the begin of the message gets printed before even attempting to call the respective function, so if the systemn hangs you can see the last operation which was about to be run. I think we should follow this principle here, too. Best regards, Wolfgang Denk
Hi Wolfgang, On Sun, Apr 14, 2013 at 1:34 AM, Wolfgang Denk <wd@denx.de> wrote: > Dear Simon Glass, > > In message <1365863234-22906-1-git-send-email-sjg@chromium.org> you wrote: >> The debug() which prints out the current call is not very useful, since if >> it is called early enough (such as before the console is ready in the >> pre-relocation board_init_f() sequence) it can hang the board. > > This should not happen (and if it does, that wouldbe a bug that needs > fixing). Yes. > >> It is more useful to print a message when a call fails, and in this case >> the non-relocated symbol address provides a way for the offending function >> to be located in System.map. > > No. it is a long styanding rule that for this tyoe of actions the > begin of the message gets printed before even attempting to call the > respective function, so if the systemn hangs you can see the last > operation which was about to be run. I think we should follow this > principle here, too. OK fair enough, makes sense. I think. It is certainly true that any of these calls could hang the board. Let's drop this patch. > > Best regards, > > Wolfgang Denk > > -- > DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de > "Love is an ideal thing, marriage a real thing; a confusion of the > real with the ideal never goes unpunished." - Goethe Regards, Simon
diff --git a/lib/initcall.c b/lib/initcall.c index fc91bf6..ace285d 100644 --- a/lib/initcall.c +++ b/lib/initcall.c @@ -23,15 +23,20 @@ #include <common.h> #include <initcall.h> +DECLARE_GLOBAL_DATA_PTR; + int initcall_run_list(init_fnc_t init_sequence[]) { init_fnc_t *init_fnc_ptr; for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { - debug("initcall: %p\n", *init_fnc_ptr); if ((*init_fnc_ptr)()) { + unsigned long reloc_ofs = 0; + + if (gd->flags & GD_FLG_RELOC) + reloc_ofs = gd->reloc_off; debug("initcall sequence %p failed at call %p\n", - init_sequence, *init_fnc_ptr); + init_sequence, (char *)*init_fnc_ptr - reloc_ofs); return -1; } }
The debug() which prints out the current call is not very useful, since if it is called early enough (such as before the console is ready in the pre-relocation board_init_f() sequence) it can hang the board. It is more useful to print a message when a call fails, and in this case the non-relocated symbol address provides a way for the offending function to be located in System.map. Adjust the initcall to provide this. Signed-off-by: Simon Glass <sjg@chromium.org> --- lib/initcall.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)