On Tue, Oct 18, 2022, at 9:40 AM, Akira Yokosawa wrote: > On Tue, 18 Oct 2022 08:44:09 +0200, Arnd Bergmann wrote: >> >> Anything weaker than a full "wmb()" probably makes the driver calling >> the writel() non-portable, so that is both vague and incorrect. > > Do you mean there is a writel() implementation somewhere in the kernel > which doesn't guarantee an implicit wmb() before MMIO write? There are lots of those, but that's not what I meant. E.g. on x86, writel() does not imply a full wmb() but still guarantees serialization between DMA and the register access. > Or do you mean my version is confusing because it can imply a weaker > write barrier is sufficient before writel_relaxed()? That's what I meant, yes. On a lot of architectures, it is sufficient to have something weaker than wmb() before writel_relaxed(), especially on anything that defines writel_relaxed() to be the same as writel(), any barrier would technically work. On arm32, using __iowmb() would be sufficient, and this can be less than a full wmb() but again it's obviously not portable. These details should not be needed in the documentation. Arnd