Skip to content

Commit

Permalink
[PATCH] initcall failure reporting
Browse files Browse the repository at this point in the history
We presently ignore the return values from initcalls.  But that can carry
useful debugging information.  So print it out if it's non-zero.

It turns out the -ENODEV happens quite a lot, due to built-in drivers which
have no hardware to drive.  So suppress that unless initcall_debug was
specified.

Also make the warning message more friendly by printing the name of the
initcall function.

Also drop the KERN_DEBUG from the initcall_debug message.  If we specified
inticall_debug then we obviously want to see the messages.

Acked-by: Paul Jackson <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Andrew Morton authored and Linus Torvalds committed Mar 25, 2006
1 parent cd02b96 commit c1cda48
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions init/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -571,17 +571,23 @@ static void __init do_initcalls(void)
int count = preempt_count();

for (call = __initcall_start; call < __initcall_end; call++) {
char *msg;
char *msg = NULL;
char msgbuf[40];
int result;

if (initcall_debug) {
printk(KERN_DEBUG "Calling initcall 0x%p", *call);
print_fn_descriptor_symbol(": %s()", (unsigned long) *call);
printk("Calling initcall 0x%p", *call);
print_fn_descriptor_symbol(": %s()",
(unsigned long) *call);
printk("\n");
}

(*call)();
result = (*call)();

msg = NULL;
if (result && (result != -ENODEV || initcall_debug)) {
sprintf(msgbuf, "error code %d", result);
msg = msgbuf;
}
if (preempt_count() != count) {
msg = "preemption imbalance";
preempt_count() = count;
Expand All @@ -591,8 +597,10 @@ static void __init do_initcalls(void)
local_irq_enable();
}
if (msg) {
printk(KERN_WARNING "error in initcall at 0x%p: "
"returned with %s\n", *call, msg);
printk(KERN_WARNING "initcall at 0x%p", *call);
print_fn_descriptor_symbol(": %s()",
(unsigned long) *call);
printk(": returned with %s\n", msg);
}
}

Expand Down

0 comments on commit c1cda48

Please sign in to comment.