[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH RFC] smp_store_mb should use smp_mb
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PATCH RFC] smp_store_mb should use smp_mb |
Date: |
Mon, 21 Dec 2015 09:22:18 +0200 |
On some architectures smp_store_mb() calls mb() which is stronger
than implied by both the name and the documentation.
smp_store_mb is only used by core kernel code at the moment, so
we know no one mis-uses it for an MMIO barrier.
Make it call smp_mb consistently before some arch-specific
code uses it as such by mistake.
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
Note: I'm guessing an ack from arch maintainers will be needed, but
I'm working on a bigger cleanup moving a bunch of duplicated code
into asm-generic/barrier.h which depends on this, so not Cc'ing
widely yet.
Please Ack if appropriate but do not merge yet.
diff --git a/arch/ia64/include/asm/barrier.h b/arch/ia64/include/asm/barrier.h
index df896a1..425552b 100644
--- a/arch/ia64/include/asm/barrier.h
+++ b/arch/ia64/include/asm/barrier.h
@@ -77,7 +77,7 @@ do {
\
___p1; \
})
-#define smp_store_mb(var, value) do { WRITE_ONCE(var, value); mb(); }
while (0)
+#define smp_store_mb(var, value) do { WRITE_ONCE(var, value); smp_mb();
} while (0)
/*
* The group barrier in front of the rsm & ssm are necessary to ensure
diff --git a/arch/powerpc/include/asm/barrier.h
b/arch/powerpc/include/asm/barrier.h
index 0eca6ef..4f0169e 100644
--- a/arch/powerpc/include/asm/barrier.h
+++ b/arch/powerpc/include/asm/barrier.h
@@ -34,7 +34,7 @@
#define rmb() __asm__ __volatile__ ("sync" : : : "memory")
#define wmb() __asm__ __volatile__ ("sync" : : : "memory")
-#define smp_store_mb(var, value) do { WRITE_ONCE(var, value); mb(); }
while (0)
+#define smp_store_mb(var, value) do { WRITE_ONCE(var, value); smp_mb();
} while (0)
#ifdef __SUBARCH_HAS_LWSYNC
# define SMPWMB LWSYNC
diff --git a/arch/s390/include/asm/barrier.h b/arch/s390/include/asm/barrier.h
index d68e11e..6c1d8b5 100644
--- a/arch/s390/include/asm/barrier.h
+++ b/arch/s390/include/asm/barrier.h
@@ -36,7 +36,7 @@
#define smp_mb__before_atomic() smp_mb()
#define smp_mb__after_atomic() smp_mb()
-#define smp_store_mb(var, value) do { WRITE_ONCE(var, value);
mb(); } while (0)
+#define smp_store_mb(var, value) do { WRITE_ONCE(var, value);
smp_mb(); } while (0)
#define smp_store_release(p, v)
\
do { \
diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h
index b42afad..0f45f93 100644
--- a/include/asm-generic/barrier.h
+++ b/include/asm-generic/barrier.h
@@ -93,7 +93,7 @@
#endif /* CONFIG_SMP */
#ifndef smp_store_mb
-#define smp_store_mb(var, value) do { WRITE_ONCE(var, value); mb(); } while
(0)
+#define smp_store_mb(var, value) do { WRITE_ONCE(var, value); smp_mb(); }
while (0)
#endif
#ifndef smp_mb__before_atomic
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, (continued)
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Peter Zijlstra, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Michael S. Tsirkin, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Peter Zijlstra, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Michael S. Tsirkin, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Peter Zijlstra, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Michael S. Tsirkin, 2015/12/17
- [Qemu-devel] new barrier type for paravirt (was Re: [PATCH] virtio_ring: use smp_store_mb), Michael S. Tsirkin, 2015/12/20
- Re: [Qemu-devel] [Xen-devel] new barrier type for paravirt (was Re: [PATCH] virtio_ring: use smp_store_mb), Andrew Cooper, 2015/12/20
- Re: [Qemu-devel] [Xen-devel] new barrier type for paravirt (was Re: [PATCH] virtio_ring: use smp_store_mb), Peter Zijlstra, 2015/12/20
- Re: [Qemu-devel] [Xen-devel] new barrier type for paravirt (was Re: [PATCH] virtio_ring: use smp_store_mb), Michael S. Tsirkin, 2015/12/21
- [Qemu-devel] [PATCH RFC] smp_store_mb should use smp_mb,
Michael S. Tsirkin <=
- Re: [Qemu-devel] [Xen-devel] new barrier type for paravirt (was Re: [PATCH] virtio_ring: use smp_store_mb), David Vrabel, 2015/12/21
- Re: [Qemu-devel] [Xen-devel] new barrier type for paravirt (was Re: [PATCH] virtio_ring: use smp_store_mb), Michael S. Tsirkin, 2015/12/21
- Re: [Qemu-devel] [Xen-devel] new barrier type for paravirt (was Re: [PATCH] virtio_ring: use smp_store_mb), Stefano Stabellini, 2015/12/21
Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Peter Zijlstra, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Michael S. Tsirkin, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Peter Zijlstra, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Michael S. Tsirkin, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Peter Zijlstra, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Will Deacon, 2015/12/17
- Re: [Qemu-devel] [PATCH] virtio_ring: use smp_store_mb, Michael S. Tsirkin, 2015/12/17