asm-generic: introduce io_stop_wc() and add implementation for ARM64
For memory accesses with write-combining attributes (e.g. those returned by ioremap_wc()), the CPU may wait for prior accesses to be merged with subsequent ones. But in some situation, such wait is bad for the performance. We introduce io_stop_wc() to prevent the merging of write-combining memory accesses before this macro with those after it. We add implementation for ARM64 using DGH instruction and provide NOP implementation for other architectures. Signed-off-by: Xiongfeng Wang <wangxiongfeng2@huawei.com> Suggested-by: Will Deacon <will@kernel.org> Suggested-by: Catalin Marinas <catalin.marinas@arm.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Link: https://lore.kernel.org/r/20211221035556.60346-1-wangxiongfeng2@huawei.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
committed by
Catalin Marinas
parent
c2c529b27c
commit
d5624bb29f
@@ -251,5 +251,16 @@ do { \
|
||||
#define pmem_wmb() wmb()
|
||||
#endif
|
||||
|
||||
/*
|
||||
* ioremap_wc() maps I/O memory as memory with write-combining attributes. For
|
||||
* this kind of memory accesses, the CPU may wait for prior accesses to be
|
||||
* merged with subsequent ones. In some situation, such wait is bad for the
|
||||
* performance. io_stop_wc() can be used to prevent the merging of
|
||||
* write-combining memory accesses before this macro with those after it.
|
||||
*/
|
||||
#ifndef io_stop_wc
|
||||
#define io_stop_wc do { } while (0)
|
||||
#endif
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* __ASM_GENERIC_BARRIER_H */
|
||||
|
||||
Reference in New Issue
Block a user