Skip to content

Commit

Permalink
workqueue: move WORKER_REBIND clearing in rebind_workers() to the end…
Browse files Browse the repository at this point in the history
… of the function

This doesn't make any functional difference and is purely to help the
next patch to be simpler.

Signed-off-by: Tejun Heo <[email protected]>
Cc: Lai Jiangshan <[email protected]>
  • Loading branch information
htejun committed Sep 5, 2012
1 parent 96e6530 commit 90beca5
Showing 1 changed file with 13 additions and 13 deletions.
26 changes: 13 additions & 13 deletions kernel/workqueue.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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)
Expand Down

0 comments on commit 90beca5

Please sign in to comment.