init - dont loose initcall code returned
PATCH 1/1 init - dont loose initcall code returned
There is an ability to loose initcall returned code if it happened with irq disabled or imbalanced preemption (and if we debug initcall)
Signed-off-by Cyrill Gorcunov <[email protected]>
---
Please review carefully - *ANY* comments are welcome!
init/main.c +7 -9
@@ -698,7 +698,6 @@ static void __init do_initcalls(void)for (call = __initcall_start; call < __initcall_end; call++) {ktime_t t0, t1, delta; -char *msg =NULL ;char msgbuf[40 ];int result;
@@ -727,23 +726,22 @@ static void __init do_initcalls(void) (unsigned long) *call); } -if (result && result != -ENODEV && initcall_debug) { -sprintf (msgbuf,"error code %d" , result); - msg = msgbuf; - } + msgbuf[0 ] =0 ; +if (result && result != -ENODEV && initcall_debug) +sprintf (msgbuf,"error code %d " , result);if (preempt_count () != count) { - msg ="preemption imbalance" ; +strncat (msgbuf,"preemption imbalance" ,sizeof (msgbuf));preempt_count () = count; }if (irqs_disabled ()) { - msg ="disabled interrupts" ; +strncat (msgbuf,"disabled interrupts" ,sizeof (msgbuf));local_irq_enable (); } -if (msg) { +if (msgbuf[0 ]) {printk (KERN_WARNING "initcall at 0x%p" , *call);print_fn_descriptor_symbol (": %s()" , (unsigned long ) *call); -printk (": returned with %s\n" , msg); +printk (": returned with %s\n" , msgbuf); } }