aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Konovalov <andreyknvl@google.com>2015-08-02 11:11:04 -0400
committerIngo Molnar <mingo@kernel.org>2015-08-03 04:59:30 -0400
commit76695af20c015206cffb84b15912be6797d0cca2 (patch)
tree9b11a22a998d19422b137cde196866efea49657c
parent75d2270280686bff21b9ba66c7f3dd379c887981 (diff)
locking, arch: use WRITE_ONCE()/READ_ONCE() in smp_store_release()/smp_load_acquire()
Replace ACCESS_ONCE() macro in smp_store_release() and smp_load_acquire() with WRITE_ONCE() and READ_ONCE() on x86, arm, arm64, ia64, metag, mips, powerpc, s390, sparc and asm-generic since ACCESS_ONCE() does not work reliably on non-scalar types. WRITE_ONCE() and READ_ONCE() were introduced in the following commits: 230fa253df63 ("kernel: Provide READ_ONCE and ASSIGN_ONCE") 43239cbe79fc ("kernel: Change ASSIGN_ONCE(val, x) to WRITE_ONCE(x, val)") Signed-off-by: Andrey Konovalov <andreyknvl@google.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Davidlohr Bueso <dbueso@suse.de> Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc) Acked-by: Ralf Baechle <ralf@linux-mips.org> Cc: Alexander Duyck <alexander.h.duyck@redhat.com> Cc: Andre Przywara <andre.przywara@arm.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Borislav Petkov <bp@suse.de> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: David S. Miller <davem@davemloft.net> Cc: Davidlohr Bueso <dave@stgolabs.net> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: James Hogan <james.hogan@imgtec.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Russell King <linux@arm.linux.org.uk> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Tony Luck <tony.luck@intel.com> Cc: Will Deacon <will.deacon@arm.com> Cc: linux-arch@vger.kernel.org Link: http://lkml.kernel.org/r/1438528264-714-1-git-send-email-andreyknvl@google.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/arm/include/asm/barrier.h4
-rw-r--r--arch/arm64/include/asm/barrier.h4
-rw-r--r--arch/ia64/include/asm/barrier.h4
-rw-r--r--arch/metag/include/asm/barrier.h4
-rw-r--r--arch/mips/include/asm/barrier.h4
-rw-r--r--arch/powerpc/include/asm/barrier.h4
-rw-r--r--arch/s390/include/asm/barrier.h4
-rw-r--r--arch/sparc/include/asm/barrier_64.h4
-rw-r--r--arch/x86/include/asm/barrier.h8
-rw-r--r--include/asm-generic/barrier.h4
10 files changed, 22 insertions, 22 deletions
diff --git a/arch/arm/include/asm/barrier.h b/arch/arm/include/asm/barrier.h
index 6c2327e1c732..70393574e0fa 100644
--- a/arch/arm/include/asm/barrier.h
+++ b/arch/arm/include/asm/barrier.h
@@ -67,12 +67,12 @@
67do { \ 67do { \
68 compiletime_assert_atomic_type(*p); \ 68 compiletime_assert_atomic_type(*p); \
69 smp_mb(); \ 69 smp_mb(); \
70 ACCESS_ONCE(*p) = (v); \ 70 WRITE_ONCE(*p, v); \
71} while (0) 71} while (0)
72 72
73#define smp_load_acquire(p) \ 73#define smp_load_acquire(p) \
74({ \ 74({ \
75 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 75 typeof(*p) ___p1 = READ_ONCE(*p); \
76 compiletime_assert_atomic_type(*p); \ 76 compiletime_assert_atomic_type(*p); \
77 smp_mb(); \ 77 smp_mb(); \
78 ___p1; \ 78 ___p1; \
diff --git a/arch/arm64/include/asm/barrier.h b/arch/arm64/include/asm/barrier.h
index 0fa47c4275cb..ef93b20bc964 100644
--- a/arch/arm64/include/asm/barrier.h
+++ b/arch/arm64/include/asm/barrier.h
@@ -44,12 +44,12 @@
44do { \ 44do { \
45 compiletime_assert_atomic_type(*p); \ 45 compiletime_assert_atomic_type(*p); \
46 barrier(); \ 46 barrier(); \
47 ACCESS_ONCE(*p) = (v); \ 47 WRITE_ONCE(*p, v); \
48} while (0) 48} while (0)
49 49
50#define smp_load_acquire(p) \ 50#define smp_load_acquire(p) \
51({ \ 51({ \
52 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 52 typeof(*p) ___p1 = READ_ONCE(*p); \
53 compiletime_assert_atomic_type(*p); \ 53 compiletime_assert_atomic_type(*p); \
54 barrier(); \ 54 barrier(); \
55 ___p1; \ 55 ___p1; \
diff --git a/arch/ia64/include/asm/barrier.h b/arch/ia64/include/asm/barrier.h
index 843ba435e43b..df896a1c41d3 100644
--- a/arch/ia64/include/asm/barrier.h
+++ b/arch/ia64/include/asm/barrier.h
@@ -66,12 +66,12 @@
66do { \ 66do { \
67 compiletime_assert_atomic_type(*p); \ 67 compiletime_assert_atomic_type(*p); \
68 barrier(); \ 68 barrier(); \
69 ACCESS_ONCE(*p) = (v); \ 69 WRITE_ONCE(*p, v); \
70} while (0) 70} while (0)
71 71
72#define smp_load_acquire(p) \ 72#define smp_load_acquire(p) \
73({ \ 73({ \
74 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 74 typeof(*p) ___p1 = READ_ONCE(*p); \
75 compiletime_assert_atomic_type(*p); \ 75 compiletime_assert_atomic_type(*p); \
76 barrier(); \ 76 barrier(); \
77 ___p1; \ 77 ___p1; \
diff --git a/arch/metag/include/asm/barrier.h b/arch/metag/include/asm/barrier.h
index 5a696e507930..172b7e5efc53 100644
--- a/arch/metag/include/asm/barrier.h
+++ b/arch/metag/include/asm/barrier.h
@@ -90,12 +90,12 @@ static inline void fence(void)
90do { \ 90do { \
91 compiletime_assert_atomic_type(*p); \ 91 compiletime_assert_atomic_type(*p); \
92 smp_mb(); \ 92 smp_mb(); \
93 ACCESS_ONCE(*p) = (v); \ 93 WRITE_ONCE(*p, v); \
94} while (0) 94} while (0)
95 95
96#define smp_load_acquire(p) \ 96#define smp_load_acquire(p) \
97({ \ 97({ \
98 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 98 typeof(*p) ___p1 = READ_ONCE(*p); \
99 compiletime_assert_atomic_type(*p); \ 99 compiletime_assert_atomic_type(*p); \
100 smp_mb(); \ 100 smp_mb(); \
101 ___p1; \ 101 ___p1; \
diff --git a/arch/mips/include/asm/barrier.h b/arch/mips/include/asm/barrier.h
index 7ecba84656d4..752e0b86c171 100644
--- a/arch/mips/include/asm/barrier.h
+++ b/arch/mips/include/asm/barrier.h
@@ -133,12 +133,12 @@
133do { \ 133do { \
134 compiletime_assert_atomic_type(*p); \ 134 compiletime_assert_atomic_type(*p); \
135 smp_mb(); \ 135 smp_mb(); \
136 ACCESS_ONCE(*p) = (v); \ 136 WRITE_ONCE(*p, v); \
137} while (0) 137} while (0)
138 138
139#define smp_load_acquire(p) \ 139#define smp_load_acquire(p) \
140({ \ 140({ \
141 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 141 typeof(*p) ___p1 = READ_ONCE(*p); \
142 compiletime_assert_atomic_type(*p); \ 142 compiletime_assert_atomic_type(*p); \
143 smp_mb(); \ 143 smp_mb(); \
144 ___p1; \ 144 ___p1; \
diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h
index 51ccc7232042..0eca6efc0631 100644
--- a/arch/powerpc/include/asm/barrier.h
+++ b/arch/powerpc/include/asm/barrier.h
@@ -76,12 +76,12 @@
76do { \ 76do { \
77 compiletime_assert_atomic_type(*p); \ 77 compiletime_assert_atomic_type(*p); \
78 smp_lwsync(); \ 78 smp_lwsync(); \
79 ACCESS_ONCE(*p) = (v); \ 79 WRITE_ONCE(*p, v); \
80} while (0) 80} while (0)
81 81
82#define smp_load_acquire(p) \ 82#define smp_load_acquire(p) \
83({ \ 83({ \
84 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 84 typeof(*p) ___p1 = READ_ONCE(*p); \
85 compiletime_assert_atomic_type(*p); \ 85 compiletime_assert_atomic_type(*p); \
86 smp_lwsync(); \ 86 smp_lwsync(); \
87 ___p1; \ 87 ___p1; \
diff --git a/arch/s390/include/asm/barrier.h b/arch/s390/include/asm/barrier.h
index e6f8615a11eb..d48fe0162331 100644
--- a/arch/s390/include/asm/barrier.h
+++ b/arch/s390/include/asm/barrier.h
@@ -42,12 +42,12 @@
42do { \ 42do { \
43 compiletime_assert_atomic_type(*p); \ 43 compiletime_assert_atomic_type(*p); \
44 barrier(); \ 44 barrier(); \
45 ACCESS_ONCE(*p) = (v); \ 45 WRITE_ONCE(*p, v); \
46} while (0) 46} while (0)
47 47
48#define smp_load_acquire(p) \ 48#define smp_load_acquire(p) \
49({ \ 49({ \
50 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 50 typeof(*p) ___p1 = READ_ONCE(*p); \
51 compiletime_assert_atomic_type(*p); \ 51 compiletime_assert_atomic_type(*p); \
52 barrier(); \ 52 barrier(); \
53 ___p1; \ 53 ___p1; \
diff --git a/arch/sparc/include/asm/barrier_64.h b/arch/sparc/include/asm/barrier_64.h
index 809941e33e12..14a928601657 100644
--- a/arch/sparc/include/asm/barrier_64.h
+++ b/arch/sparc/include/asm/barrier_64.h
@@ -60,12 +60,12 @@ do { __asm__ __volatile__("ba,pt %%xcc, 1f\n\t" \
60do { \ 60do { \
61 compiletime_assert_atomic_type(*p); \ 61 compiletime_assert_atomic_type(*p); \
62 barrier(); \ 62 barrier(); \
63 ACCESS_ONCE(*p) = (v); \ 63 WRITE_ONCE(*p, v); \
64} while (0) 64} while (0)
65 65
66#define smp_load_acquire(p) \ 66#define smp_load_acquire(p) \
67({ \ 67({ \
68 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 68 typeof(*p) ___p1 = READ_ONCE(*p); \
69 compiletime_assert_atomic_type(*p); \ 69 compiletime_assert_atomic_type(*p); \
70 barrier(); \ 70 barrier(); \
71 ___p1; \ 71 ___p1; \
diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h
index e51a8f803f55..d2bcfbed11c3 100644
--- a/arch/x86/include/asm/barrier.h
+++ b/arch/x86/include/asm/barrier.h
@@ -57,12 +57,12 @@
57do { \ 57do { \
58 compiletime_assert_atomic_type(*p); \ 58 compiletime_assert_atomic_type(*p); \
59 smp_mb(); \ 59 smp_mb(); \
60 ACCESS_ONCE(*p) = (v); \ 60 WRITE_ONCE(*p, v); \
61} while (0) 61} while (0)
62 62
63#define smp_load_acquire(p) \ 63#define smp_load_acquire(p) \
64({ \ 64({ \
65 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 65 typeof(*p) ___p1 = READ_ONCE(*p); \
66 compiletime_assert_atomic_type(*p); \ 66 compiletime_assert_atomic_type(*p); \
67 smp_mb(); \ 67 smp_mb(); \
68 ___p1; \ 68 ___p1; \
@@ -74,12 +74,12 @@ do { \
74do { \ 74do { \
75 compiletime_assert_atomic_type(*p); \ 75 compiletime_assert_atomic_type(*p); \
76 barrier(); \ 76 barrier(); \
77 ACCESS_ONCE(*p) = (v); \ 77 WRITE_ONCE(*p, v); \
78} while (0) 78} while (0)
79 79
80#define smp_load_acquire(p) \ 80#define smp_load_acquire(p) \
81({ \ 81({ \
82 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 82 typeof(*p) ___p1 = READ_ONCE(*p); \
83 compiletime_assert_atomic_type(*p); \ 83 compiletime_assert_atomic_type(*p); \
84 barrier(); \ 84 barrier(); \
85 ___p1; \ 85 ___p1; \
diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h
index 55e3abc2d027..b42afada1280 100644
--- a/include/asm-generic/barrier.h
+++ b/include/asm-generic/barrier.h
@@ -108,12 +108,12 @@
108do { \ 108do { \
109 compiletime_assert_atomic_type(*p); \ 109 compiletime_assert_atomic_type(*p); \
110 smp_mb(); \ 110 smp_mb(); \
111 ACCESS_ONCE(*p) = (v); \ 111 WRITE_ONCE(*p, v); \
112} while (0) 112} while (0)
113 113
114#define smp_load_acquire(p) \ 114#define smp_load_acquire(p) \
115({ \ 115({ \
116 typeof(*p) ___p1 = ACCESS_ONCE(*p); \ 116 typeof(*p) ___p1 = READ_ONCE(*p); \
117 compiletime_assert_atomic_type(*p); \ 117 compiletime_assert_atomic_type(*p); \
118 smp_mb(); \ 118 smp_mb(); \
119 ___p1; \ 119 ___p1; \