Message ID | 1523917017-28084-1-git-send-email-okaya@codeaurora.org (mailing list archive) |
---|---|
State | Not Applicable, archived |
Delegated to: | Andy Gross |
Headers | show |
On 4/16/2018 6:16 PM, Sinan Kaya wrote: > memory-barriers.txt has been updated with the following requirement. > > "When using writel(), a prior wmb() is not needed to guarantee that the > cache coherent memory writes have completed before writing to the MMIO > region." > > Current writeX() and iowriteX() implementations on alpha are not > satisfying this requirement as the barrier is after the register write. > > Move mb() in writeX() and iowriteX() functions to guarantee that HW > observes memory changes before performing register operations. > > Signed-off-by: Sinan Kaya <okaya@codeaurora.org> > Reported-by: Arnd Bergmann <arnd@arndb.de> > --- > arch/alpha/kernel/io.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) Sorry for catching this late but this also needs to go to 4.17 after review. I missed the writel() implementation on arch/alpha/kernel/io.c file on my first patch.
Hi Matt, On 4/17/2018 2:43 PM, Sinan Kaya wrote: > On 4/16/2018 6:16 PM, Sinan Kaya wrote: >> memory-barriers.txt has been updated with the following requirement. >> >> "When using writel(), a prior wmb() is not needed to guarantee that the >> cache coherent memory writes have completed before writing to the MMIO >> region." >> >> Current writeX() and iowriteX() implementations on alpha are not >> satisfying this requirement as the barrier is after the register write. >> >> Move mb() in writeX() and iowriteX() functions to guarantee that HW >> observes memory changes before performing register operations. >> >> Signed-off-by: Sinan Kaya <okaya@codeaurora.org> >> Reported-by: Arnd Bergmann <arnd@arndb.de> >> --- >> arch/alpha/kernel/io.c | 14 +++++++------- >> 1 file changed, 7 insertions(+), 7 deletions(-) > > Sorry for catching this late but this also needs to go to 4.17 after > review. > > I missed the writel() implementation on arch/alpha/kernel/io.c file > on my first patch. > Can you also queue this for 4.17? There are already drivers checked into 4.17 that dropped the unnecessary barriers. I really hate to see Alpha broken because of this. Sinan
On 4/20/2018 12:20 PM, Sinan Kaya wrote: > Hi Matt, > > On 4/17/2018 2:43 PM, Sinan Kaya wrote: >> On 4/16/2018 6:16 PM, Sinan Kaya wrote: >>> memory-barriers.txt has been updated with the following requirement. >>> >>> "When using writel(), a prior wmb() is not needed to guarantee that the >>> cache coherent memory writes have completed before writing to the MMIO >>> region." >>> >>> Current writeX() and iowriteX() implementations on alpha are not >>> satisfying this requirement as the barrier is after the register write. >>> >>> Move mb() in writeX() and iowriteX() functions to guarantee that HW >>> observes memory changes before performing register operations. >>> >>> Signed-off-by: Sinan Kaya <okaya@codeaurora.org> >>> Reported-by: Arnd Bergmann <arnd@arndb.de> >>> --- >>> arch/alpha/kernel/io.c | 14 +++++++------- >>> 1 file changed, 7 insertions(+), 7 deletions(-) >> >> Sorry for catching this late but this also needs to go to 4.17 after >> review. >> >> I missed the writel() implementation on arch/alpha/kernel/io.c file >> on my first patch. >> > > Can you also queue this for 4.17? > > There are already drivers checked into 4.17 that dropped the unnecessary > barriers. > > I really hate to see Alpha broken because of this. ping. > > Sinan >
On Fri, Apr 20, 2018 at 9:20 AM, Sinan Kaya <okaya@codeaurora.org> wrote: > Hi Matt, > > On 4/17/2018 2:43 PM, Sinan Kaya wrote: >> On 4/16/2018 6:16 PM, Sinan Kaya wrote: >>> memory-barriers.txt has been updated with the following requirement. >>> >>> "When using writel(), a prior wmb() is not needed to guarantee that the >>> cache coherent memory writes have completed before writing to the MMIO >>> region." >>> >>> Current writeX() and iowriteX() implementations on alpha are not >>> satisfying this requirement as the barrier is after the register write. >>> >>> Move mb() in writeX() and iowriteX() functions to guarantee that HW >>> observes memory changes before performing register operations. >>> >>> Signed-off-by: Sinan Kaya <okaya@codeaurora.org> >>> Reported-by: Arnd Bergmann <arnd@arndb.de> >>> --- >>> arch/alpha/kernel/io.c | 14 +++++++------- >>> 1 file changed, 7 insertions(+), 7 deletions(-) >> >> Sorry for catching this late but this also needs to go to 4.17 after >> review. >> >> I missed the writel() implementation on arch/alpha/kernel/io.c file >> on my first patch. >> > > Can you also queue this for 4.17? > > There are already drivers checked into 4.17 that dropped the unnecessary > barriers. > > I really hate to see Alpha broken because of this. Yes, I will pick it up for 4.17. Thanks for the patch. -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/alpha/kernel/io.c b/arch/alpha/kernel/io.c index 3e3d49c..c025a3e 100644 --- a/arch/alpha/kernel/io.c +++ b/arch/alpha/kernel/io.c @@ -37,20 +37,20 @@ unsigned int ioread32(void __iomem *addr) void iowrite8(u8 b, void __iomem *addr) { - IO_CONCAT(__IO_PREFIX,iowrite8)(b, addr); mb(); + IO_CONCAT(__IO_PREFIX,iowrite8)(b, addr); } void iowrite16(u16 b, void __iomem *addr) { - IO_CONCAT(__IO_PREFIX,iowrite16)(b, addr); mb(); + IO_CONCAT(__IO_PREFIX,iowrite16)(b, addr); } void iowrite32(u32 b, void __iomem *addr) { - IO_CONCAT(__IO_PREFIX,iowrite32)(b, addr); mb(); + IO_CONCAT(__IO_PREFIX,iowrite32)(b, addr); } EXPORT_SYMBOL(ioread8); @@ -176,26 +176,26 @@ u64 readq(const volatile void __iomem *addr) void writeb(u8 b, volatile void __iomem *addr) { - __raw_writeb(b, addr); mb(); + __raw_writeb(b, addr); } void writew(u16 b, volatile void __iomem *addr) { - __raw_writew(b, addr); mb(); + __raw_writew(b, addr); } void writel(u32 b, volatile void __iomem *addr) { - __raw_writel(b, addr); mb(); + __raw_writel(b, addr); } void writeq(u64 b, volatile void __iomem *addr) { - __raw_writeq(b, addr); mb(); + __raw_writeq(b, addr); } EXPORT_SYMBOL(readb);
memory-barriers.txt has been updated with the following requirement. "When using writel(), a prior wmb() is not needed to guarantee that the cache coherent memory writes have completed before writing to the MMIO region." Current writeX() and iowriteX() implementations on alpha are not satisfying this requirement as the barrier is after the register write. Move mb() in writeX() and iowriteX() functions to guarantee that HW observes memory changes before performing register operations. Signed-off-by: Sinan Kaya <okaya@codeaurora.org> Reported-by: Arnd Bergmann <arnd@arndb.de> --- arch/alpha/kernel/io.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)