提交 a489a03e 编写于 作者: L Lai Jiangshan 提交者: Tejun Heo

workqueue: remove an unneeded UNBOUND test before waking up the next worker

In process_one_work():

	if ((worker->flags & WORKER_UNBOUND) && need_more_worker(pool))
		wake_up_worker(pool);

the first test is unneeded.  Even if the first test is removed, it
doesn't affect the wake-up logic for WORKER_UNBOUND, and it will not
introduce any useless wake-ups for normal per-cpu workers since
nr_running is always >= 1.  It will introduce useless/redundant
wake-ups for CPU_INTENSIVE, but this case is rare and the next patch
will also remove this redundant wake-up.

tj: Minor updates to the description and comment.
Signed-off-by: NLai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: NTejun Heo <tj@kernel.org>
上级 d8ca83e6
......@@ -2048,10 +2048,13 @@ __acquires(&pool->lock)
worker_set_flags(worker, WORKER_CPU_INTENSIVE, true);
/*
* Unbound pool isn't concurrency managed and work items should be
* executed ASAP. Wake up another worker if necessary.
* Wake up another worker if necessary. The condition is always
* false for normal per-cpu workers since nr_running would always
* be >= 1 at this point. This is used to chain execution of the
* pending work items for WORKER_NOT_RUNNING workers such as the
* UNBOUND ones.
*/
if ((worker->flags & WORKER_UNBOUND) && need_more_worker(pool))
if (need_more_worker(pool))
wake_up_worker(pool);
/*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册