From 58fd476865960341dcc6112f48bd98edc5b88317 Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Tue, 4 Sep 2012 23:12:33 -0700 Subject: [PATCH] --- yaml --- r: 322611 b: refs/heads/master c: 90beca5de591e12482a812f23a7f10690962ed4a h: refs/heads/master i: 322609: e7ea59a1d1aaf1f769c9f5aa0ea489e9fe901b12 322607: 692b37aaf0c3ec309630f56040a52a1bd134a7eb v: v3 --- [refs] | 2 +- trunk/kernel/workqueue.c | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/[refs] b/[refs] index dafe6849fa97..0d253810b2a2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 96e65306b81351b656835c15931d1d237b252f27 +refs/heads/master: 90beca5de591e12482a812f23a7f10690962ed4a diff --git a/trunk/kernel/workqueue.c b/trunk/kernel/workqueue.c index c462cd60c374..d79a18d0c42e 100644 --- a/trunk/kernel/workqueue.c +++ b/trunk/kernel/workqueue.c @@ -1422,19 +1422,7 @@ static void rebind_workers(struct global_cwq *gcwq) goto retry; } - /* - * All idle workers are rebound and waiting for %WORKER_REBIND to - * be cleared inside idle_worker_rebind(). Clear and release. - * Clearing %WORKER_REBIND from this foreign context is safe - * because these workers are still guaranteed to be idle. - */ - for_each_worker_pool(pool, gcwq) - list_for_each_entry(worker, &pool->idle_list, entry) - worker->flags &= ~WORKER_REBIND; - - wake_up_all(&gcwq->rebind_hold); - - /* rebind busy workers */ + /* all idle workers are rebound, rebind busy workers */ for_each_busy_worker(worker, i, pos, gcwq) { struct work_struct *rebind_work = &worker->rebind_work; unsigned long worker_flags = worker->flags; @@ -1454,6 +1442,18 @@ static void rebind_workers(struct global_cwq *gcwq) worker->scheduled.next, work_color_to_flags(WORK_NO_COLOR)); } + + /* + * All idle workers are rebound and waiting for %WORKER_REBIND to + * be cleared inside idle_worker_rebind(). Clear and release. + * Clearing %WORKER_REBIND from this foreign context is safe + * because these workers are still guaranteed to be idle. + */ + for_each_worker_pool(pool, gcwq) + list_for_each_entry(worker, &pool->idle_list, entry) + worker->flags &= ~WORKER_REBIND; + + wake_up_all(&gcwq->rebind_hold); } static struct worker *alloc_worker(void)