[PATCH 19/30] workqueue: make single thread workqueue shared worker pool friendly
Reimplement st (single thread) workqueue so that it's friendly to shared worker pool. It was originally implemented by confining st workqueues to use cwq of a fixed cpu and always having a worker for the cpu. This implementation isn't very friendly to shared worker pool and suboptimal in that it ends up crossing ... 14 Jun 2010 18:29
[PATCH 26/30] workqueue: add system_wq, system_long_wq and system_nrt_wq
Rename keventd_wq to system_wq and export it. Also add system_long_wq and system_nrt_wq. The former is to host long running works separately (so that flush_scheduled_work() dosen't take so long) and the latter guarantees any queued work item is never executed in parallel by multiple CPUs. These workqueues will b... 14 Jun 2010 18:29
[PATCH 23/30] workqueue: use shared worklist and pool all workers per cpu
Use gcwq->worklist instead of cwq->worklist and break the strict association between a cwq and its worker. All works queued on a cpu are queued on gcwq->worklist and processed by any available worker on the gcwq. As there no longer is strict association between a cwq and its worker, whether a work is executing ... 14 Jun 2010 18:29
[PATCH 01/30] kthread: implement kthread_data()
Implement kthread_data() which takes @task pointing to a kthread and returns @data specified when creating the kthread. The caller is responsible for ensuring the validity of @task when calling this function. Signed-off-by: Tejun Heo <tj(a)kernel.org> --- include/linux/kthread.h | 1 + kernel/kthread.c ... 14 Jun 2010 18:29
[PATCH 20/30] workqueue: add find_worker_executing_work() and track current_cwq
Now that all the workers are tracked by gcwq, we can find which worker is executing a work from gcwq. Implement find_worker_executing_work() and make worker track its current_cwq so that we can find things the other way around. This will be used to implement non-reentrant wqs. Signed-off-by: Tejun Heo <tj(a)kerne... 14 Jun 2010 18:29
[PATCH 28/30] workqueue: implement several utility APIs
Implement the following utility APIs. workqueue_set_max_active() : adjust max_active of a wq workqueue_congested() : test whether a wq is contested work_cpu() : determine the last / current cpu of a work work_busy() : query whether a work is busy * Anton Blanchard fixed missing ret initialization in w... 14 Jun 2010 18:29
[PATCH 16/30] workqueue: introduce global cwq and unify cwq locks
There is one gcwq (global cwq) per each cpu and all cwqs on an cpu point to it. A gcwq contains a lock to be used by all cwqs on the cpu and an ida to give IDs to workers belonging to the cpu. This patch introduces gcwq, moves worker_ida into gcwq and make all cwqs on the same cpu use the cpu's gcwq->lock instea... 14 Jun 2010 18:29
[PATCH 30/30] async: use workqueue for worker pool
Replace private worker pool with system_long_wq. Signed-off-by: Tejun Heo <tj(a)kernel.org> Cc: Arjan van de Ven <arjan(a)infradead.org> --- kernel/async.c | 140 ++++++++----------------------------------------------- 1 files changed, 21 insertions(+), 119 deletions(-) diff --git a/kernel/async.c b/kernel/asyn... 14 Jun 2010 18:29
[PATCH 05/30] workqueue: merge feature parameters into flags
Currently, __create_workqueue_key() takes @singlethread and @freezeable paramters and store them separately in workqueue_struct. Merge them into a single flags parameter and field and use WQ_FREEZEABLE and WQ_SINGLE_THREAD. Signed-off-by: Tejun Heo <tj(a)kernel.org> --- include/linux/workqueue.h | 25 +++++++++... 14 Jun 2010 18:29
[PATCH 03/30] workqueue: kill RT workqueue
With stop_machine() converted to use cpu_stop, RT workqueue doesn't have any user left. Kill RT workqueue support. Signed-off-by: Tejun Heo <tj(a)kernel.org> --- include/linux/workqueue.h | 20 +++++++++----------- kernel/workqueue.c | 6 ------ 2 files changed, 9 insertions(+), 17 deletions(-) d... 14 Jun 2010 18:29