On 4/4/2018 3:50 PM, Arnd Bergmann wrote: > On Wed, Apr 4, 2018 at 7:48 PM, Sinan Kaya <okaya@xxxxxxxxxxxxxx> wrote: >> On 4/4/2018 11:55 AM, Arnd Bergmann wrote: >>> Yes, exactly, plus the same for write and in/out of course. >> >> I was looking at this... >> >> inb() and outb() seem to be calling writeb(). It gets the wmb/barrier automatically >> when we fix writeb(). >> >> Did I miss something? > > At least outb() needs stricter barriers than writeb() in theory, what > we want here > is that outb() has not just made it out to the device but that the > write has been > confirmed completed by the device. Some architectures can't do it, but those > that can should have an easy way to hook into that using a separate set of > barriers. > > Using the riscv barrier names, we could do this like > > #ifndef __io_bw() > #define __io_bw() wmb() > #endif > > #ifndef __io_aw > #define __io_aw() barrier() > #endif > > #ifndef __io_pbw > #define __io_pbw() __io_bw() > #endif > > #ifndef __io_paw > #define __io_paw() __io_aw() > #endif > > and the same thing for reads. This way, an architecture could override > any of those, but still get reasonable defaults for the others. > For __io_bw(), I picked barrier() instead of do {} while (0), no idea > if that's any better, I just play safe here. I posted V3. I hope I captured what you mean above correctly. > > Arnd > -- Sinan Kaya Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project. -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html