static void cpu_stop_park(unsigned int cpu)
 {
        struct cpu_stopper *stopper = &per_cpu(cpu_stopper, cpu);
-       struct cpu_stop_work *work;
+       struct cpu_stop_work *work, *tmp;
        unsigned long flags;
 
        /* drain remaining works */
        spin_lock_irqsave(&stopper->lock, flags);
-       list_for_each_entry(work, &stopper->works, list)
+       list_for_each_entry_safe(work, tmp, &stopper->works, list) {
+               list_del_init(&work->list);
                cpu_stop_signal_done(work->done, false);
+       }
        stopper->enabled = false;
        spin_unlock_irqrestore(&stopper->lock, flags);
 }