* [PATCH v4 1/2] MIPS: io: prevent compiler reordering on the default writeX() implementation @ 2018-04-13 2:30 Sinan Kaya 2018-04-13 2:30 ` [PATCH v4 2/2] MIPS: io: add a barrier after register read in readX() Sinan Kaya 0 siblings, 1 reply; 4+ messages in thread From: Sinan Kaya @ 2018-04-13 2:30 UTC (permalink / raw) To: linux-arm-kernel writeX() has a strong ordering semantics with respect to memory updates. In the abscence of a write barrier or a compiler barrier, commpiler can reorder register and memory update instructions. This breaks the writeX() API. Signed-off-by: Sinan Kaya <okaya@codeaurora.org> --- arch/mips/include/asm/io.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h index 0cbf3af..fd00ddaf 100644 --- a/arch/mips/include/asm/io.h +++ b/arch/mips/include/asm/io.h @@ -307,7 +307,7 @@ static inline void iounmap(const volatile void __iomem *addr) #if defined(CONFIG_CPU_CAVIUM_OCTEON) || defined(CONFIG_LOONGSON3_ENHANCEMENT) #define war_io_reorder_wmb() wmb() #else -#define war_io_reorder_wmb() do { } while (0) +#define war_io_reorder_wmb() barrier() #endif #define __BUILD_MEMORY_SINGLE(pfx, bwlq, type, irq) \ -- 2.7.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v4 2/2] MIPS: io: add a barrier after register read in readX() 2018-04-13 2:30 [PATCH v4 1/2] MIPS: io: prevent compiler reordering on the default writeX() implementation Sinan Kaya @ 2018-04-13 2:30 ` Sinan Kaya 2018-04-13 2:33 ` Sinan Kaya 0 siblings, 1 reply; 4+ messages in thread From: Sinan Kaya @ 2018-04-13 2:30 UTC (permalink / raw) To: linux-arm-kernel While a barrier is present in writeX() function before the register write, a similar barrier is missing in the readX() function after the register read. This could allow memory accesses following readX() to observe stale data. Signed-off-by: Sinan Kaya <okaya@codeaurora.org> Reported-by: Arnd Bergmann <arnd@arndb.de> --- arch/mips/include/asm/io.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h index fd00ddaf..d96af41 100644 --- a/arch/mips/include/asm/io.h +++ b/arch/mips/include/asm/io.h @@ -377,6 +377,8 @@ static inline type pfx##read##bwlq(const volatile void __iomem *mem) \ BUG(); \ } \ \ + /* prevent prefetching of coherent DMA dma prematurely */ \ + rmb(); \ return pfx##ioswab##bwlq(__mem, __val); \ } -- 2.7.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v4 2/2] MIPS: io: add a barrier after register read in readX() 2018-04-13 2:30 ` [PATCH v4 2/2] MIPS: io: add a barrier after register read in readX() Sinan Kaya @ 2018-04-13 2:33 ` Sinan Kaya 2018-04-13 23:52 ` James Hogan 0 siblings, 1 reply; 4+ messages in thread From: Sinan Kaya @ 2018-04-13 2:33 UTC (permalink / raw) To: linux-arm-kernel On 4/12/2018 10:30 PM, Sinan Kaya wrote: > + /* prevent prefetching of coherent DMA dma prematurely */ \ I tried to write DMA data but my keyboard is not cooperating. I'll hold onto posting another version until I hear back from you for wmb(). -- 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. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v4 2/2] MIPS: io: add a barrier after register read in readX() 2018-04-13 2:33 ` Sinan Kaya @ 2018-04-13 23:52 ` James Hogan 0 siblings, 0 replies; 4+ messages in thread From: James Hogan @ 2018-04-13 23:52 UTC (permalink / raw) To: linux-arm-kernel On Thu, Apr 12, 2018 at 10:33:42PM -0400, Sinan Kaya wrote: > On 4/12/2018 10:30 PM, Sinan Kaya wrote: > > + /* prevent prefetching of coherent DMA dma prematurely */ \ > > I tried to write DMA data but my keyboard is not cooperating. I'll hold onto > posting another version until I hear back from you for wmb(). No problem, I've applied both for 4.17 and tweaked the comment. Thanks James -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20180414/a3da563c/attachment.sig> ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-04-13 23:52 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-04-13 2:30 [PATCH v4 1/2] MIPS: io: prevent compiler reordering on the default writeX() implementation Sinan Kaya 2018-04-13 2:30 ` [PATCH v4 2/2] MIPS: io: add a barrier after register read in readX() Sinan Kaya 2018-04-13 2:33 ` Sinan Kaya 2018-04-13 23:52 ` James Hogan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).