Pull thermal into release branch
[linux-drm-fsl-dcu.git] / arch / ppc / kernel / smp.c
index bc5bf1124836adb4013c8a09ceb28c9421feed26..055998575cb48ec3d484bb2094a7c2aa8e119d08 100644 (file)
@@ -8,12 +8,10 @@
  *
  */
 
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/sched.h>
 #include <linux/smp.h>
-#include <linux/smp_lock.h>
 #include <linux/interrupt.h>
 #include <linux/kernel_stat.h>
 #include <linux/delay.h>
@@ -85,7 +83,7 @@ smp_message_pass(int target, int msg)
 /*
  * Common functions
  */
-void smp_message_recv(int msg, struct pt_regs *regs)
+void smp_message_recv(int msg)
 {
        atomic_inc(&ipi_recv);
 
@@ -101,7 +99,7 @@ void smp_message_recv(int msg, struct pt_regs *regs)
                break;
 #ifdef CONFIG_XMON
        case PPC_MSG_XMON_BREAK:
-               xmon(regs);
+               xmon(get_irq_regs());
                break;
 #endif /* CONFIG_XMON */
        default:
@@ -301,20 +299,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 +343,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 +367,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();
 
        /*