Browse Source

x86: add callin tests to cpu_up

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>
Glauber de Oliveira Costa 17 years ago
parent
commit
b9f9294a86
1 changed files with 13 additions and 7 deletions
  1. 13 7
      arch/x86/kernel/smpboot_32.c

+ 13 - 7
arch/x86/kernel/smpboot_32.c

@@ -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):