diff options
author | Lai Jiangshan <laijs@cn.fujitsu.com> | 2014-05-20 11:46:31 +0200 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2014-05-20 16:59:31 +0200 |
commit | da028469ba173e9c634b6ecf80bb0c69c7d1024d (patch) | |
tree | 03fb68749d70240606157675161a47d9c367e213 /kernel/workqueue_internal.h | |
parent | workqueue: destroy worker directly in the idle timeout handler (diff) | |
download | linux-da028469ba173e9c634b6ecf80bb0c69c7d1024d.tar.xz linux-da028469ba173e9c634b6ecf80bb0c69c7d1024d.zip |
workqueue: separate iteration role from worker_idr
worker_idr has the iteration (iterating for attached workers) and
worker ID duties. These two duties don't have to be tied together. We
can separate them and use a list for tracking attached workers and
iteration.
Before this separation, it wasn't possible to add rescuer workers to
worker_idr due to rescuer workers couldn't allocate ID dynamically
because ID-allocation depends on memory-allocation, which rescuer
can't depend on.
After separation, we can easily add the rescuer workers to the list for
iteration without any memory-allocation. It is required when we attach
the rescuer worker to the pool in later patch.
tj: Minor description updates.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'kernel/workqueue_internal.h')
-rw-r--r-- | kernel/workqueue_internal.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/workqueue_internal.h b/kernel/workqueue_internal.h index 7e2204db0b1a..8888e0672442 100644 --- a/kernel/workqueue_internal.h +++ b/kernel/workqueue_internal.h @@ -37,6 +37,8 @@ struct worker { struct task_struct *task; /* I: worker task */ struct worker_pool *pool; /* I: the associated pool */ /* L: for rescuers */ + struct list_head node; /* M: anchored at pool->workers */ + /* M: runs through worker->node */ unsigned long last_active; /* L: last active timestamp */ unsigned int flags; /* X: flags */ |