|
Prev: general protection fault: 0000 [1] PREEMPT SMP DEBUG_PAGEALLOC
Next: perfmon: add context switch hooks for x86
From: Cyrill Gorcunov on 7 May 2008 10:20 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 <gorcunov(a)gmail.com> --- Andrew, it's an updated version Index: linux-2.6.git/init/main.c =================================================================== --- linux-2.6.git.orig/init/main.c 2008-05-06 17:51:27.000000000 +0400 +++ linux-2.6.git/init/main.c 2008-05-07 18:10:22.000000000 +0400 @@ -702,7 +702,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; @@ -724,22 +723,23 @@ static void __init do_initcalls(void) (unsigned long long) delta.tv64 >> 20); } - 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]) { print_fn_descriptor_symbol(KERN_WARNING "initcall %s()", (unsigned long) *call); - printk(" returned with %s\n", msg); + printk(" returned with %s\n", msgbuf); } } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |