diff options
author | Tejun Heo <tj@kernel.org> | 2013-03-19 13:45:21 -0700 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2013-03-19 13:45:21 -0700 |
commit | 822d8405d13931062d653e0c2cc0199ed801b072 (patch) | |
tree | 388738869c771c58d20bc24d25729fabc0aab171 /.gitignore | |
parent | 14a40ffccd6163bbcd1d6f32b28a88ffe6149fc6 (diff) |
workqueue: convert worker_pool->worker_ida to idr and implement for_each_pool_worker()
Make worker_ida an idr - worker_idr and use it to implement
for_each_pool_worker() which will be used to simplify worker rebinding
on CPU_ONLINE.
pool->worker_idr is protected by both pool->manager_mutex and
pool->lock so that it can be iterated while holding either lock.
* create_worker() allocates ID without installing worker pointer and
installs the pointer later using idr_replace(). This is because
worker ID is needed when creating the actual task to name it and the
new worker shouldn't be visible to iterations before fully
initialized.
* In destroy_worker(), ID removal is moved before kthread_stop().
This is again to guarantee that only fully working workers are
visible to for_each_pool_worker().
Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Diffstat (limited to '.gitignore')
0 files changed, 0 insertions, 0 deletions