aboutsummaryrefslogtreecommitdiffstats
path: root/init/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'init/main.c')
-rw-r--r--init/main.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/init/main.c b/init/main.c
index d7211faed2a..03b408dff82 100644
--- a/init/main.c
+++ b/init/main.c
@@ -209,8 +209,19 @@ early_param("quiet", quiet_kernel);
209 209
210static int __init loglevel(char *str) 210static int __init loglevel(char *str)
211{ 211{
212 get_option(&str, &console_loglevel); 212 int newlevel;
213 return 0; 213
214 /*
215 * Only update loglevel value when a correct setting was passed,
216 * to prevent blind crashes (when loglevel being set to 0) that
217 * are quite hard to debug
218 */
219 if (get_option(&str, &newlevel)) {
220 console_loglevel = newlevel;
221 return 0;
222 }
223
224 return -EINVAL;
214} 225}
215 226
216early_param("loglevel", loglevel); 227early_param("loglevel", loglevel);
@@ -369,9 +380,9 @@ static noinline void __init_refok rest_init(void)
369 init_idle_bootup_task(current); 380 init_idle_bootup_task(current);
370 preempt_enable_no_resched(); 381 preempt_enable_no_resched();
371 schedule(); 382 schedule();
372 preempt_disable();
373 383
374 /* Call into cpu_idle with preempt disabled */ 384 /* Call into cpu_idle with preempt disabled */
385 preempt_disable();
375 cpu_idle(); 386 cpu_idle();
376} 387}
377 388
@@ -715,10 +726,11 @@ static void __init do_basic_setup(void)
715{ 726{
716 cpuset_init_smp(); 727 cpuset_init_smp();
717 usermodehelper_init(); 728 usermodehelper_init();
718 init_tmpfs(); 729 shmem_init();
719 driver_init(); 730 driver_init();
720 init_irq_proc(); 731 init_irq_proc();
721 do_ctors(); 732 do_ctors();
733 usermodehelper_enable();
722 do_initcalls(); 734 do_initcalls();
723} 735}
724 736