When pwq->refcnt == 0, the retrying is guaranteed to make forward-progress. The comment above the code explains it well:
/* * pwq is determined and locked. For unbound pools, we could have * raced with pwq release and it could already be dead. If its * refcnt is zero, repeat pwq selection. Note that pwqs never die * without another pwq replacing it in the numa_pwq_tbl or while * work items are executing on it, so the retrying is guaranteed to * make forward-progress. */ It means the cpu_relax() here is useless and sometimes misleading, it should retry directly and make some progress rather than waste time. Signed-off-by: Lai Jiangshan <la...@cn.fujitsu.com> --- kernel/workqueue.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 23f9a2b..98b38b5 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -1368,7 +1368,6 @@ retry: if (unlikely(!pwq->refcnt)) { if (wq->flags & WQ_UNBOUND) { spin_unlock(&pwq->pool->lock); - cpu_relax(); goto retry; } /* oops */ -- 1.7.4.4 -- 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/