I found the early-increasing nr_running in wq_worker_waking_up() is useless in many cases. it tries to avoid waking up idle workers for pending work item. but delay increasing nr_running does not increase waking up idle workers.
so we delay increasing and remove wq_worker_waking_up() and ... enjoy a simpler concurrency management. Lai Jiangshan (8): workqueue: remove @cpu from wq_worker_sleeping() workqueue: use create_and_start_worker() in manage_workers() workqueue: remove cpu_intensive from process_one_work() workqueue: quit cm mode when sleeping workqueue: remove disabled wq_worker_waking_up() workqueue: make nr_running non-atomic workqueue: move worker->flags up workqueue: rename ->nr_running to ->nr_cm_workers kernel/sched/core.c | 6 +- kernel/workqueue.c | 234 +++++++++++++++--------------------------- kernel/workqueue_internal.h | 9 +- 3 files changed, 89 insertions(+), 160 deletions(-) -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/