]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - kernel/workqueue.c
schedule_on_each_cpu(): use preempt_disable()
[karo-tx-linux.git] / kernel / workqueue.c
index b6fa5e63085d65b42f46fe97735751b6f402cab4..1ea4bcb86974fb94acf70d5bd9c2ec45dcf08782 100644 (file)
@@ -638,7 +638,7 @@ int schedule_on_each_cpu(work_func_t func)
        if (!works)
                return -ENOMEM;
 
-       mutex_lock(&workqueue_mutex);
+       preempt_disable();              /* CPU hotplug */
        for_each_online_cpu(cpu) {
                struct work_struct *work = per_cpu_ptr(works, cpu);
 
@@ -646,7 +646,7 @@ int schedule_on_each_cpu(work_func_t func)
                set_bit(WORK_STRUCT_PENDING, work_data_bits(work));
                __queue_work(per_cpu_ptr(keventd_wq->cpu_wq, cpu), work);
        }
-       mutex_unlock(&workqueue_mutex);
+       preempt_enable();
        flush_workqueue(keventd_wq);
        free_percpu(works);
        return 0;