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/

Reply via email to