vserver 1.9.5.x5
[linux-2.6.git] / arch / i386 / kernel / smpboot.c
index 016a070..4b120fc 100644 (file)
@@ -61,11 +61,12 @@ static int __initdata smp_b_stepping;
 /* Number of siblings per CPU package */
 int smp_num_siblings = 1;
 int phys_proc_id[NR_CPUS]; /* Package ID of each logical CPU */
+EXPORT_SYMBOL(phys_proc_id);
 
 /* bitmap of online cpus */
 cpumask_t cpu_online_map;
 
-static cpumask_t cpu_callin_map;
+cpumask_t cpu_callin_map;
 cpumask_t cpu_callout_map;
 static cpumask_t smp_commenced_mask;
 
@@ -382,8 +383,6 @@ void __init smp_callin(void)
        setup_local_APIC();
        map_cpu_to_logical_apicid();
 
-       local_irq_enable();
-
        /*
         * Get our bogomips.
         */
@@ -396,7 +395,7 @@ void __init smp_callin(void)
        smp_store_cpu_info(cpuid);
 
        disable_APIC_timer();
-       local_irq_disable();
+
        /*
         * Allow the master to continue.
         */
@@ -411,12 +410,10 @@ void __init smp_callin(void)
 
 int cpucount;
 
-extern int cpu_idle(void);
-
 /*
  * Activate a secondary processor.
  */
-int __init start_secondary(void *unused)
+static void __init start_secondary(void *unused)
 {
        /*
         * Dont put anything before smp_callin(), SMP
@@ -440,8 +437,12 @@ int __init start_secondary(void *unused)
         */
        local_flush_tlb();
        cpu_set(smp_processor_id(), cpu_online_map);
+
+       /* We can take interrupts now: we're officially "up". */
+       local_irq_enable();
+
        wmb();
-       return cpu_idle();
+       cpu_idle();
 }
 
 /*
@@ -1024,8 +1025,8 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
        printk(KERN_INFO
                "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
                cpucount+1,
-               bogosum/(500000/HZ),
-               (bogosum/(5000/HZ))%100);
+               HZ*(bogosum >> 3)/62500,
+               (HZ*(bogosum >> 3)/625) % 100);
        
        Dprintk("Before bogocount - setting activated=1.\n");