]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/powerpc/kernel/smp.c
powerpc: stop_this_cpu: remove the cpu from the online map.
[karo-tx-linux.git] / arch / powerpc / kernel / smp.c
index d387b3937ccceb16bd84d707b8949a3200338d20..97196eefef3edccba66bfd7398b9d75962e1d5c4 100644 (file)
@@ -189,11 +189,11 @@ void arch_send_call_function_single_ipi(int cpu)
        smp_ops->message_pass(cpu, PPC_MSG_CALL_FUNC_SINGLE);
 }
 
-void arch_send_call_function_ipi(cpumask_t mask)
+void arch_send_call_function_ipi_mask(const struct cpumask *mask)
 {
        unsigned int cpu;
 
-       for_each_cpu_mask(cpu, mask)
+       for_each_cpu(cpu, mask)
                smp_ops->message_pass(cpu, PPC_MSG_CALL_FUNCTION);
 }
 
@@ -218,6 +218,9 @@ void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *))
 
 static void stop_this_cpu(void *dummy)
 {
+       /* Remove this CPU */
+       set_cpu_online(smp_processor_id(), false);
+
        local_irq_disable();
        while (1)
                ;
@@ -287,7 +290,7 @@ void __devinit smp_prepare_boot_cpu(void)
 {
        BUG_ON(smp_processor_id() != boot_cpuid);
 
-       cpu_set(boot_cpuid, cpu_online_map);
+       set_cpu_online(boot_cpuid, true);
        cpu_set(boot_cpuid, per_cpu(cpu_sibling_map, boot_cpuid));
        cpu_set(boot_cpuid, per_cpu(cpu_core_map, boot_cpuid));
 #ifdef CONFIG_PPC64
@@ -307,7 +310,7 @@ int generic_cpu_disable(void)
        if (cpu == boot_cpuid)
                return -EBUSY;
 
-       cpu_clear(cpu, cpu_online_map);
+       set_cpu_online(cpu, false);
 #ifdef CONFIG_PPC64
        vdso_data->processorCount--;
        fixup_irqs(cpu_online_map);
@@ -361,7 +364,7 @@ void generic_mach_cpu_die(void)
        smp_wmb();
        while (__get_cpu_var(cpu_state) != CPU_UP_PREPARE)
                cpu_relax();
-       cpu_set(cpu, cpu_online_map);
+       set_cpu_online(cpu, true);
        local_irq_enable();
 }
 #endif
@@ -508,7 +511,7 @@ int __devinit start_secondary(void *unused)
 
        ipi_call_lock();
        notify_cpu_starting(cpu);
-       cpu_set(cpu, cpu_online_map);
+       set_cpu_online(cpu, true);
        /* Update sibling maps */
        base = cpu_first_thread_in_core(cpu);
        for (i = 0; i < threads_per_core; i++) {