summaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorArd van Breemen <ard@telegraafnet.nl>2007-04-21 00:10:28 +0200
committerAdrian Bunk <bunk@stusta.de>2007-04-21 00:10:28 +0200
commitcfef930041a5dba4d3c8eb03d9d24fae9b129b08 (patch)
treea76533ec34b574fe07945a6c2a8c77354e98a1ca /init
parentae0199ba95ac7d5f45a565afb4adf8bb1e7ef59c (diff)
downloadlinux-stable-cfef930041a5dba4d3c8eb03d9d24fae9b129b08.tar.gz
linux-stable-cfef930041a5dba4d3c8eb03d9d24fae9b129b08.tar.bz2
linux-stable-cfef930041a5dba4d3c8eb03d9d24fae9b129b08.zip
start_kernel: test if irq's got enabled early, barf, and disable them again
The calls made by parse_parms to other initialization code might enable interrupts again way too early. Having interrupts on this early can make systems PANIC when they initialize the IRQ controllers (which happens later in the code). This patch detects that irq's are enabled again, barfs about it and disables them again as a safety net. [akpm@osdl.org: cleanups] Signed-off-by: Ard van Breemen <ard@telegraafnet.nl> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Adrian Bunk <bunk@stusta.de>
Diffstat (limited to 'init')
-rw-r--r--init/main.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/init/main.c b/init/main.c
index 4c194c47395f..5edd3013d810 100644
--- a/init/main.c
+++ b/init/main.c
@@ -477,6 +477,11 @@ asmlinkage void __init start_kernel(void)
parse_args("Booting kernel", command_line, __start___param,
__stop___param - __start___param,
&unknown_bootoption);
+ if (!irqs_disabled()) {
+ printk(KERN_WARNING "start_kernel(): bug: interrupts were "
+ "enabled *very* early, fixing it\n");
+ local_irq_disable();
+ }
sort_main_extable();
trap_init();
rcu_init();