From: Tejun Heo Date: Thu, 14 Feb 2013 03:29:07 +0000 (-0800) Subject: workqueue: fix is_chained_work() regression X-Git-Tag: v3.9-rc1~159^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1dd638149f1f9d7d7dbb32591d5c7c2a0ea36264;p=platform%2Fkernel%2Flinux-exynos.git workqueue: fix is_chained_work() regression c9e7cf273f ("workqueue: move busy_hash from global_cwq to worker_pool") incorrectly converted is_chained_work() to use get_gcwq() inside for_each_gcwq_cpu() while removing get_gcwq(). As cwq might not exist for all possible workqueue CPUs, @cwq can be NULL and the following cwq deferences can lead to oops. Fix it by using for_each_cwq_cpu() instead, which is the better one to use anyway as we only need to check pools that the wq is associated with. Signed-off-by: Tejun Heo --- diff --git a/kernel/workqueue.c b/kernel/workqueue.c index d6fdce1..0d26ab3 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -1167,7 +1167,7 @@ static bool is_chained_work(struct workqueue_struct *wq) unsigned long flags; unsigned int cpu; - for_each_wq_cpu(cpu) { + for_each_cwq_cpu(cpu, wq) { struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq); struct worker_pool *pool = cwq->pool; struct worker *worker;