X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=kernel%2Fworkqueue.c;h=1ea4bcb86974fb94acf70d5bd9c2ec45dcf08782;hb=e18f3ffb9c3ddfc1b4ad8f38f5f2acae8c16f0c9;hp=b6fa5e63085d65b42f46fe97735751b6f402cab4;hpb=a1e3cf418fc1e6b13bdc472ffb60bd02735e41a6;p=deliverable%2Flinux.git diff --git a/kernel/workqueue.c b/kernel/workqueue.c index b6fa5e63085d..1ea4bcb86974 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -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;