Messages in this thread Patch in this message | | | From | Joonsoo Kim <> | Subject | [PATCH 4/5] workqueue: use system_highpri_wq for highpri workers in rebind_workers() | Date | Tue, 14 Aug 2012 01:17:51 +0900 |
| |
In rebind_workers(), we do inserting a work to rebind to cpu for busy workers. Currently, in this case, we use only system_wq. This makes a possible error situation as there is mismatch between cwq->pool and worker->pool.
To prevent this, we should use system_highpri_wq for highpri worker to match theses. This implements it.
Signed-off-by: Joonsoo Kim <js1304@gmail.com>
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index f69f094..e0e1d41 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -489,6 +489,11 @@ static int worker_pool_pri(struct worker_pool *pool) return pool - pool->gcwq->pools; } +static struct workqueue_struct *get_pool_system_wq(struct worker_pool *pool) +{ + return worker_pool_pri(pool) ? system_highpri_wq : system_wq; +} + static struct global_cwq *get_gcwq(unsigned int cpu) { if (cpu != WORK_CPU_UNBOUND) @@ -1450,9 +1455,10 @@ retry: /* wq doesn't matter, use the default one */ debug_work_activate(rebind_work); - insert_work(get_cwq(gcwq->cpu, system_wq), rebind_work, - worker->scheduled.next, - work_color_to_flags(WORK_NO_COLOR)); + insert_work( + get_cwq(gcwq->cpu, get_pool_system_wq(worker->pool)), + rebind_work, worker->scheduled.next, + work_color_to_flags(WORK_NO_COLOR)); } } -- 1.7.9.5
| |