As checked with BUG_ON in the case of CPU_UP_PREPARE, we have to dequeue work first for further actions, then stopper reaches sane and clear state.
Signed-off-by: Hillf Danton <dhi...@gmail.com> --- --- a/kernel/stop_machine.c Fri Feb 8 11:22:44 2013 +++ b/kernel/stop_machine.c Fri Feb 8 11:29:40 2013 @@ -342,8 +342,12 @@ static int __cpuinit cpu_stop_cpu_callba kthread_stop(stopper->thread); /* drain remaining works */ spin_lock_irq(&stopper->lock); - list_for_each_entry(work, &stopper->works, list) + while (!list_empty(&stopper->works)) { + work = list_first_entry(&stopper->works, + struct cpu_stop_work, list); + list_del_init(&work->list); cpu_stop_signal_done(work->done, false); + } stopper->enabled = false; spin_unlock_irq(&stopper->lock); /* release the stopper */ -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/