]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - include/linux/stop_machine.h
stop_machine: implement stop_machine_from_inactive_cpu()
[karo-tx-linux.git] / include / linux / stop_machine.h
index 14d3524d12747b8c8caee6452b1259ec178c92ad..e0f2da25d751a50e3ca52e7c3d044b9765cd53dc 100644 (file)
@@ -126,15 +126,19 @@ int stop_machine(int (*fn)(void *), void *data, const struct cpumask *cpus);
  */
 int __stop_machine(int (*fn)(void *), void *data, const struct cpumask *cpus);
 
+int stop_machine_from_inactive_cpu(int (*fn)(void *), void *data,
+                                  const struct cpumask *cpus);
+
 #else   /* CONFIG_STOP_MACHINE && CONFIG_SMP */
 
 static inline int __stop_machine(int (*fn)(void *), void *data,
                                 const struct cpumask *cpus)
 {
+       unsigned long flags;
        int ret;
-       local_irq_disable();
+       local_irq_save(flags);
        ret = fn(data);
-       local_irq_enable();
+       local_irq_restore(flags);
        return ret;
 }
 
@@ -144,5 +148,11 @@ static inline int stop_machine(int (*fn)(void *), void *data,
        return __stop_machine(fn, data, cpus);
 }
 
+static inline int stop_machine_from_inactive_cpu(int (*fn)(void *), void *data,
+                                                const struct cpumask *cpus)
+{
+       return __stop_machine(fn, data, cpus);
+}
+
 #endif /* CONFIG_STOP_MACHINE && CONFIG_SMP */
 #endif /* _LINUX_STOP_MACHINE */