path: root/kernel/workqueue_internal.h
diff options
authorLai Jiangshan <>2014-05-20 17:46:31 +0800
committerTejun Heo <>2014-05-20 10:59:31 -0400
commitda028469ba173e9c634b6ecf80bb0c69c7d1024d (patch)
tree03fb68749d70240606157675161a47d9c367e213 /kernel/workqueue_internal.h
parent3347fc9f36e7e5d3ebe504fc4034745b5d8971d3 (diff)
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 <> Signed-off-by: Tejun Heo <>
Diffstat (limited to 'kernel/workqueue_internal.h')
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 */