diff --git a/arch/x86/kernel/smpboot_32.c b/arch/x86/kernel/smpboot_32.c index a232f4d1f7a5ad96cfc37b3b2f0e4f4af23eef43..b44a743d0ea924a28654b34e5176183f5f1ff9e9 100644 --- a/arch/x86/kernel/smpboot_32.c +++ b/arch/x86/kernel/smpboot_32.c @@ -735,10 +735,6 @@ static int __cpuinit __smp_prepare_cpu(int cpu) } #endif -/* - * Cycle through the processors sending APIC IPIs to boot each. - */ - static int boot_cpu_logical_apicid; /* Where the IO area was mapped on multiquad, always 0 otherwise */ void *xquad_portio; @@ -746,26 +742,8 @@ void *xquad_portio; EXPORT_SYMBOL(xquad_portio); #endif -static void __init smp_boot_cpus(unsigned int max_cpus) +static int __init smp_sanity_check(unsigned max_cpus) { - int apicid, cpu, bit, kicked; - unsigned long bogosum = 0; - - /* - * Setup boot CPU information - */ - smp_store_cpu_info(0); /* Final full version of the data */ - printk("CPU%d: ", 0); - print_cpu_info(&cpu_data(0)); - - boot_cpu_physical_apicid = GET_APIC_ID(apic_read(APIC_ID)); - boot_cpu_logical_apicid = logical_smp_processor_id(); - per_cpu(x86_cpu_to_apicid, 0) = boot_cpu_physical_apicid; - - current_thread_info()->cpu = 0; - - set_cpu_sibling_map(0); - /* * If we couldn't find an SMP configuration at boot time, * get out of here now! @@ -780,7 +758,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus) map_cpu_to_logical_apicid(); cpu_set(0, per_cpu(cpu_sibling_map, 0)); cpu_set(0, per_cpu(cpu_core_map, 0)); - return; + return -1; } /* @@ -806,7 +784,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus) map_cpu_to_logical_apicid(); cpu_set(0, per_cpu(cpu_sibling_map, 0)); cpu_set(0, per_cpu(cpu_core_map, 0)); - return; + return -1; } verify_local_APIC(); @@ -828,9 +806,36 @@ static void __init smp_boot_cpus(unsigned int max_cpus) map_cpu_to_logical_apicid(); cpu_set(0, per_cpu(cpu_sibling_map, 0)); cpu_set(0, per_cpu(cpu_core_map, 0)); - return; + return -1; } + return 0; +} + + +/* + * Cycle through the processors sending APIC IPIs to boot each. + */ +static void __init smp_boot_cpus(unsigned int max_cpus) +{ + int apicid, cpu, bit, kicked; + unsigned long bogosum = 0; + + /* + * Setup boot CPU information + */ + smp_store_cpu_info(0); /* Final full version of the data */ + printk(KERN_INFO "CPU%d: ", 0); + print_cpu_info(&cpu_data(0)); + + boot_cpu_physical_apicid = GET_APIC_ID(apic_read(APIC_ID)); + boot_cpu_logical_apicid = logical_smp_processor_id(); + per_cpu(x86_cpu_to_apicid, 0) = boot_cpu_physical_apicid; + + current_thread_info()->cpu = 0; + + set_cpu_sibling_map(0); + smp_sanity_check(max_cpus); connect_bsp_APIC(); setup_local_APIC(); map_cpu_to_logical_apicid();