On 2018-03-27 07:23, Benjamin Herrenschmidt wrote:
On Tue, 2018-03-27 at 11:44 +0200, Arnd Bergmann wrote:
> The interesting thing is that we do seem to have a whole LOT of these
> spurrious wmb before writel all over the tree, I suspect because of
> that incorrect recommendation in memory-barriers.txt.
>
> We should fix that.

Maybe the problem is just that it's so counter-intuitive that we don't
need that barrier in Linux, when the hardware does need one on some
architectures.

How about we define a barrier type instruction specifically for this
purpose, something like wmb_before_mmio() and have all architectures
define that to an empty macro?

This is exactly what wmb() is about and exactly what Linux rejected
back in the day (and in hindsight I agree with him).

That way, having correct code using wmb_before_mmio() will not
trigger an incorrect review comment that leads to extra wmb(). ;-)

Ah, you mean have an empty macro that will always be empty on all
architectures just to fool people ? :-)

Not sure that will fly ... I think we just need to be documenting that
stuff better and not have incorrect examples. Also a sweep to remove
some useless ones like the one in e1000e would help.

I have been converting wmb+writel to wmb+writel_relaxed. (About 30 patches)

I will have to just remove the wmb and keep writel, then repost.

Some of these got applied. It will cause some churn for the maintainers.


Cheers,
Ben.

Reply via email to