Re: [PATCH] workqueue: remove the unneeded cpu_relax() in __queue_work()

From: Tejun Heo
Date: Mon May 26 2014 - 06:54:51 EST


On Mon, May 26, 2014 at 01:27:55PM +0800, Lai Jiangshan wrote:
> changing pwq:
> install pwq
> lock(pool->lock)
> put_pwq();
> unlock(pool->lock)
>
> __queue_work():
> lock(pool->lock)
> test ref and find it zero;
> see the installation here;
> it is guaranteed to get the installed pwq on the immediate next try.
> unlock()
> retry.

The fact that pool->lock locking happens to provide enough barrier for
the above to work is an accidental implementation detail. We
theoretically can move refcnting out of pool->lock. Nothing
semantically guarantees that barrier to be there to interlock pwq
qinstallation and the last put. Removing that cpu_relax() doesn't buy
us *ANYTHING* and removing that with rationale of making it go faster
would easily win pointless micro optimization award of the year. Just
let it go.

--
tejun
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/