Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

s390/barrier: factor out bcr_serialize()

Factor out bcr_serialize() inline assembly function which describes
what the bcr instruction is used for.
Use bcr_serialize() like before in mb(), but also in upcoming changes.

Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>

authored by

Heiko Carstens and committed by
Vasily Gorbik
fbbd1407 25d36a85

+14 -10
+14 -10
arch/s390/include/asm/barrier.h
··· 16 16 17 17 #ifdef CONFIG_HAVE_MARCH_Z196_FEATURES 18 18 /* Fast-BCR without checkpoint synchronization */ 19 - #define __ASM_BARRIER "bcr 14,0\n" 19 + #define __ASM_BCR_SERIALIZE "bcr 14,0\n" 20 20 #else 21 - #define __ASM_BARRIER "bcr 15,0\n" 21 + #define __ASM_BCR_SERIALIZE "bcr 15,0\n" 22 22 #endif 23 23 24 - #define mb() do { asm volatile(__ASM_BARRIER : : : "memory"); } while (0) 24 + static __always_inline void bcr_serialize(void) 25 + { 26 + asm volatile(__ASM_BCR_SERIALIZE : : : "memory"); 27 + } 25 28 26 - #define rmb() barrier() 27 - #define wmb() barrier() 28 - #define dma_rmb() mb() 29 - #define dma_wmb() mb() 30 - #define __smp_mb() mb() 31 - #define __smp_rmb() rmb() 32 - #define __smp_wmb() wmb() 29 + #define mb() bcr_serialize() 30 + #define rmb() barrier() 31 + #define wmb() barrier() 32 + #define dma_rmb() mb() 33 + #define dma_wmb() mb() 34 + #define __smp_mb() mb() 35 + #define __smp_rmb() rmb() 36 + #define __smp_wmb() wmb() 33 37 34 38 #define __smp_store_release(p, v) \ 35 39 do { \