x86: add callin tests to cpu_up
authorGlauber de Oliveira Costa <gcosta@redhat.com>
Wed, 19 Mar 2008 17:25:55 +0000 (14:25 -0300)
committerIngo Molnar <mingo@elte.hu>
Thu, 17 Apr 2008 15:41:02 +0000 (17:41 +0200)
Now that we boot cpus here, callin_map has this meaning (same
as x86_64)

Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/smpboot_32.c

index 4ba5ab2d81fb4ce465d5edb37d1a1e96ac08e467..33758a2ddd4892839ea46b66fe731a6c7fad5e79 100644 (file)
@@ -839,6 +839,7 @@ int __cpuinit native_cpu_up(unsigned int cpu)
 {
        int apicid = cpu_present_to_apicid(cpu);
        unsigned long flags;
+       int err;
 
        WARN_ON(irqs_disabled());
 
@@ -850,6 +851,14 @@ int __cpuinit native_cpu_up(unsigned int cpu)
                return -EINVAL;
        }
 
+       /*
+        * Already booted CPU?
+        */
+       if (cpu_isset(cpu, cpu_callin_map)) {
+               Dprintk("do_boot_cpu %d Already started\n", cpu);
+               return -ENOSYS;
+       }
+
        /*
         * Save current MTRR state in case it was changed since early boot
         * (e.g. by the ACPI SMI) to initialize new CPUs with MTRRs in sync:
@@ -863,15 +872,12 @@ int __cpuinit native_cpu_up(unsigned int cpu)
                        min_t(unsigned long, KERNEL_PGD_PTRS, USER_PGD_PTRS));
        flush_tlb_all();
 
-       do_boot_cpu(apicid, cpu);
-
-       /* In case one didn't come up */
-       if (!cpu_isset(cpu, cpu_callin_map)) {
-               printk(KERN_DEBUG "skipping cpu%d, didn't come online\n", cpu);
-               return -EIO;
+       err = do_boot_cpu(apicid, cpu);
+       if (err < 0) {
+               Dprintk("do_boot_cpu failed %d\n", err);
+               return err;
        }
 
-
        /*
         * Check TSC synchronization with the AP (keep irqs disabled
         * while doing so):