diff options
Diffstat (limited to 'init/main.c')
| -rw-r--r-- | init/main.c | 13 | 
1 files changed, 11 insertions, 2 deletions
diff --git a/init/main.c b/init/main.c index 00799c1d462..33c37c379e9 100644 --- a/init/main.c +++ b/init/main.c @@ -96,6 +96,15 @@ static inline void mark_rodata_ro(void) { }  extern void tc_init(void);  #endif +/* + * Debug helper: via this flag we know that we are in 'early bootup code' + * where only the boot processor is running with IRQ disabled.  This means + * two things - IRQ must not be enabled before the flag is cleared and some + * operations which are not allowed with IRQ disabled are allowed while the + * flag is set. + */ +bool early_boot_irqs_disabled __read_mostly; +  enum system_states system_state __read_mostly;  EXPORT_SYMBOL(system_state); @@ -554,7 +563,7 @@ asmlinkage void __init start_kernel(void)  	cgroup_init_early();  	local_irq_disable(); -	early_boot_irqs_off(); +	early_boot_irqs_disabled = true;  /*   * Interrupts are still disabled. Do necessary setups, then @@ -621,7 +630,7 @@ asmlinkage void __init start_kernel(void)  	if (!irqs_disabled())  		printk(KERN_CRIT "start_kernel(): bug: interrupts were "  				 "enabled early\n"); -	early_boot_irqs_on(); +	early_boot_irqs_disabled = false;  	local_irq_enable();  	/* Interrupts are enabled now so all GFP allocations are safe. */  |