Skip to content

Commit 74f0609

Browse files
Nick Pigginpaulusmack
authored andcommitted
powerpc: Optimise smp_wmb on 64-bit processors
For 64-bit processors, lwsync is the recommended method of store/store ordering on caching enabled memory. For those subarchs which have lwsync, use it rather than eieio for smp_wmb. Signed-off-by: Nick Piggin <[email protected]> Signed-off-by: Paul Mackerras <[email protected]>
1 parent e9a4b6a commit 74f0609

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

include/asm-powerpc/system.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
*
3131
* For wmb(), we use sync since wmb is used in drivers to order
3232
* stores to system memory with respect to writes to the device.
33-
* However, smp_wmb() can be a lighter-weight eieio barrier on
34-
* SMP since it is only used to order updates to system memory.
33+
* However, smp_wmb() can be a lighter-weight lwsync or eieio barrier
34+
* on SMP since it is only used to order updates to system memory.
3535
*/
3636
#define mb() __asm__ __volatile__ ("sync" : : : "memory")
3737
#define rmb() __asm__ __volatile__ ("sync" : : : "memory")
@@ -43,9 +43,16 @@
4343
#ifdef __KERNEL__
4444
#define AT_VECTOR_SIZE_ARCH 6 /* entries in ARCH_DLINFO */
4545
#ifdef CONFIG_SMP
46+
47+
#ifdef __SUBARCH_HAS_LWSYNC
48+
# define SMPWMB lwsync
49+
#else
50+
# define SMPWMB eieio
51+
#endif
52+
4653
#define smp_mb() mb()
4754
#define smp_rmb() rmb()
48-
#define smp_wmb() eieio()
55+
#define smp_wmb() __asm__ __volatile__ (__stringify(SMPWMB) : : :"memory")
4956
#define smp_read_barrier_depends() read_barrier_depends()
5057
#else
5158
#define smp_mb() barrier()

0 commit comments

Comments
 (0)