aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
Diffstat (limited to 'init')
-rw-r--r--init/main.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/init/main.c b/init/main.c
index b2f3b566790e..628b8e9e841a 100644
--- a/init/main.c
+++ b/init/main.c
@@ -47,6 +47,8 @@
47#include <linux/key.h> 47#include <linux/key.h>
48#include <linux/unwind.h> 48#include <linux/unwind.h>
49#include <linux/buffer_head.h> 49#include <linux/buffer_head.h>
50#include <linux/debug_locks.h>
51#include <linux/lockdep.h>
50 52
51#include <asm/io.h> 53#include <asm/io.h>
52#include <asm/bugs.h> 54#include <asm/bugs.h>
@@ -456,6 +458,16 @@ asmlinkage void __init start_kernel(void)
456 458
457 smp_setup_processor_id(); 459 smp_setup_processor_id();
458 460
461 /*
462 * Need to run as early as possible, to initialize the
463 * lockdep hash:
464 */
465 lockdep_init();
466
467 local_irq_disable();
468 early_boot_irqs_off();
469 early_init_irq_lock_class();
470
459/* 471/*
460 * Interrupts are still disabled. Do necessary setups, then 472 * Interrupts are still disabled. Do necessary setups, then
461 * enable them 473 * enable them
@@ -496,8 +508,13 @@ asmlinkage void __init start_kernel(void)
496 init_timers(); 508 init_timers();
497 hrtimers_init(); 509 hrtimers_init();
498 softirq_init(); 510 softirq_init();
499 time_init();
500 timekeeping_init(); 511 timekeeping_init();
512 time_init();
513 profile_init();
514 if (!irqs_disabled())
515 printk("start_kernel(): bug: interrupts were enabled early\n");
516 early_boot_irqs_on();
517 local_irq_enable();
501 518
502 /* 519 /*
503 * HACK ALERT! This is early. We're enabling the console before 520 * HACK ALERT! This is early. We're enabling the console before
@@ -507,8 +524,16 @@ asmlinkage void __init start_kernel(void)
507 console_init(); 524 console_init();
508 if (panic_later) 525 if (panic_later)
509 panic(panic_later, panic_param); 526 panic(panic_later, panic_param);
510 profile_init(); 527
511 local_irq_enable(); 528 lockdep_info();
529
530 /*
531 * Need to run this when irqs are enabled, because it wants
532 * to self-test [hard/soft]-irqs on/off lock inversion bugs
533 * too:
534 */
535 locking_selftest();
536
512#ifdef CONFIG_BLK_DEV_INITRD 537#ifdef CONFIG_BLK_DEV_INITRD
513 if (initrd_start && !initrd_below_start_ok && 538 if (initrd_start && !initrd_below_start_ok &&
514 initrd_start < min_low_pfn << PAGE_SHIFT) { 539 initrd_start < min_low_pfn << PAGE_SHIFT) {