Merge branch 'upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/vitb/linux...
[powerpc.git] / arch / ppc / kernel / smp.c
index bc5bf11..ca57e89 100644 (file)
@@ -8,7 +8,6 @@
  *
  */
 
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/sched.h>
@@ -301,20 +300,24 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
 
        /* Probe platform for CPUs: always linear. */
        num_cpus = smp_ops->probe();
+       
+       if (num_cpus < 2)
+               smp_tb_synchronized = 1;
+       
        for (i = 0; i < num_cpus; ++i)
                cpu_set(i, cpu_possible_map);
 
        /* Backup CPU 0 state */
        __save_cpu_setup();
 
-       for_each_cpu(cpu) {
+       for_each_possible_cpu(cpu) {
                if (cpu == smp_processor_id())
                        continue;
                /* create a process for the processor */
                p = fork_idle(cpu);
                if (IS_ERR(p))
                        panic("failed fork for CPU %u: %li", cpu, PTR_ERR(p));
-               p->thread_info->cpu = cpu;
+               task_thread_info(p)->cpu = cpu;
                idle_tasks[cpu] = p;
        }
 }
@@ -341,6 +344,7 @@ int __devinit start_secondary(void *unused)
        cpu = smp_processor_id();
         smp_store_cpu_info(cpu);
        set_dec(tb_ticks_per_jiffy);
+       preempt_disable();
        cpu_callin_map[cpu] = 1;
 
        printk("CPU %d done callin...\n", cpu);
@@ -364,7 +368,7 @@ int __cpu_up(unsigned int cpu)
        char buf[32];
        int c;
 
-       secondary_ti = idle_tasks[cpu]->thread_info;
+       secondary_ti = task_thread_info(idle_tasks[cpu]);
        mb();
 
        /*