enum stopmachine_state curstate = STOPMACHINE_NONE;
struct stop_machine_data *smdata = &idle;
int cpu = smp_processor_id();
+ int err;
if (!active_cpus) {
if (cpu == first_cpu(cpu_online_map))
hard_irq_disable();
break;
case STOPMACHINE_RUN:
- /* |= allows error detection if functions on
- * multiple CPUs. */
- smdata->fnret |= smdata->fn(smdata->data);
+ /* On multiple CPUs only a single error code
+ * is needed to tell that something failed. */
+ err = smdata->fn(smdata->data);
+ if (err)
+ smdata->fnret = err;
break;
default:
break;
stop_machine_work = alloc_percpu(struct work_struct);
return 0;
}
-early_initcall(stop_machine_init);
+core_initcall(stop_machine_init);