Messages in this thread | | | Date | Fri, 31 Aug 2012 09:08:22 +0800 | From | Lai Jiangshan <> | Subject | Re: [PATCH 4/9 V3] workqueue: add non_manager_role_manager_mutex_unlock() |
| |
On 08/30/2012 05:17 PM, Tejun Heo wrote: > Hello, Lai. > > On Thu, Aug 30, 2012 at 05:16:01PM +0800, Lai Jiangshan wrote: >> gcwq_unbind_fn() is unsafe even it is called from a work item. >> so we need non_manager_role_manager_mutex_unlock(). >> >> If rebind_workers() is called from a work item, it is safe when there is >> no CPU_INTENSIVE items. but we can't disable CPU_INTENSIVE items, >> so it is still unsafe, we need non_manager_role_manager_mutex_unlock() too. > > Can you please elaborate? Why is it not safe if there are > CPU_INTENSIVE items? > > Thanks. >
Imaging there only two workers, they all have UNBOUND bit because the rebind_workers() has not been called. The First one is processing work items, the second one is idle, when the first one encounter the work item of rebind_workers() and handle it, at the same the second one try to create workers and failed and go to process work items too. but unlikely the second one encounters a CPU_INTENSIVE items, the nr_running is still <=1 after the first one finish rebind_workers().
nr_running. first one: process work item endless +0 or +1 second one: process the CPU_INTENSIVE item endless +0
No one can service for manager role.
Thanks. Lai
| |