aboutsummaryrefslogtreecommitdiffstats
path: root/init/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'init/main.c')
-rw-r--r--init/main.c36
1 files changed, 15 insertions, 21 deletions
diff --git a/init/main.c b/init/main.c
index edeace036fd9..20fdc9884b77 100644
--- a/init/main.c
+++ b/init/main.c
@@ -87,8 +87,6 @@ extern void init_IRQ(void);
87extern void fork_init(unsigned long); 87extern void fork_init(unsigned long);
88extern void mca_init(void); 88extern void mca_init(void);
89extern void sbus_init(void); 89extern void sbus_init(void);
90extern void pidhash_init(void);
91extern void pidmap_init(void);
92extern void prio_tree_init(void); 90extern void prio_tree_init(void);
93extern void radix_tree_init(void); 91extern void radix_tree_init(void);
94extern void free_initmem(void); 92extern void free_initmem(void);
@@ -415,6 +413,13 @@ static void __init smp_init(void)
415{ 413{
416 unsigned int cpu; 414 unsigned int cpu;
417 415
416 /*
417 * Set up the current CPU as possible to migrate to.
418 * The other ones will be done by cpu_up/cpu_down()
419 */
420 cpu = smp_processor_id();
421 cpu_set(cpu, cpu_active_map);
422
418 /* FIXME: This should be done in userspace --RR */ 423 /* FIXME: This should be done in userspace --RR */
419 for_each_present_cpu(cpu) { 424 for_each_present_cpu(cpu) {
420 if (num_online_cpus() >= setup_max_cpus) 425 if (num_online_cpus() >= setup_max_cpus)
@@ -630,9 +635,10 @@ asmlinkage void __init start_kernel(void)
630 635
631#ifdef CONFIG_BLK_DEV_INITRD 636#ifdef CONFIG_BLK_DEV_INITRD
632 if (initrd_start && !initrd_below_start_ok && 637 if (initrd_start && !initrd_below_start_ok &&
633 initrd_start < min_low_pfn << PAGE_SHIFT) { 638 page_to_pfn(virt_to_page(initrd_start)) < min_low_pfn) {
634 printk(KERN_CRIT "initrd overwritten (0x%08lx < 0x%08lx) - " 639 printk(KERN_CRIT "initrd overwritten (0x%08lx < 0x%08lx) - "
635 "disabling it.\n",initrd_start,min_low_pfn << PAGE_SHIFT); 640 "disabling it.\n",
641 page_to_pfn(virt_to_page(initrd_start)), min_low_pfn);
636 initrd_start = 0; 642 initrd_start = 0;
637 } 643 }
638#endif 644#endif
@@ -737,13 +743,13 @@ static void __init do_one_initcall(initcall_t fn)
737} 743}
738 744
739 745
740extern initcall_t __initcall_start[], __initcall_end[]; 746extern initcall_t __initcall_start[], __initcall_end[], __early_initcall_end[];
741 747
742static void __init do_initcalls(void) 748static void __init do_initcalls(void)
743{ 749{
744 initcall_t *call; 750 initcall_t *call;
745 751
746 for (call = __initcall_start; call < __initcall_end; call++) 752 for (call = __early_initcall_end; call < __initcall_end; call++)
747 do_one_initcall(*call); 753 do_one_initcall(*call);
748 754
749 /* Make sure there is no pending stuff from the initcall sequence */ 755 /* Make sure there is no pending stuff from the initcall sequence */
@@ -768,24 +774,12 @@ static void __init do_basic_setup(void)
768 do_initcalls(); 774 do_initcalls();
769} 775}
770 776
771static int __initdata nosoftlockup;
772
773static int __init nosoftlockup_setup(char *str)
774{
775 nosoftlockup = 1;
776 return 1;
777}
778__setup("nosoftlockup", nosoftlockup_setup);
779
780static void __init do_pre_smp_initcalls(void) 777static void __init do_pre_smp_initcalls(void)
781{ 778{
782 extern int spawn_ksoftirqd(void); 779 initcall_t *call;
783 780
784 init_call_single_data(); 781 for (call = __initcall_start; call < __early_initcall_end; call++)
785 migration_init(); 782 do_one_initcall(*call);
786 spawn_ksoftirqd();
787 if (!nosoftlockup)
788 spawn_softlockup_task();
789} 783}
790 784
791static void run_init_process(char *init_filename) 785static void run_init_process(char *init_filename)