diff options
author | Andrea Parri <parri.andrea@gmail.com> | 2018-02-22 04:24:29 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2018-02-23 02:38:15 -0500 |
commit | 79d442461df7478cdd0c50d9b8a76f431f150fa3 (patch) | |
tree | 53ec8c34409ef60806faae9ee2bdff17c301875f | |
parent | cb13b424e986aed68d74cbaec3449ea23c50e167 (diff) |
locking/xchg/alpha: Clean up barrier usage by using smp_mb() in place of __ASM__MB
Replace each occurrence of __ASM__MB with a (trailing) smp_mb() in
xchg(), cmpxchg(), and remove the now unused __ASM__MB definitions;
this improves readability, with no additional synchronization cost.
Suggested-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Andrea Parri <parri.andrea@gmail.com>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Matt Turner <mattst88@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-alpha@vger.kernel.org
Link: http://lkml.kernel.org/r/1519291469-5702-1-git-send-email-parri.andrea@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | arch/alpha/include/asm/cmpxchg.h | 6 | ||||
-rw-r--r-- | arch/alpha/include/asm/xchg.h | 16 |
2 files changed, 8 insertions, 14 deletions
diff --git a/arch/alpha/include/asm/cmpxchg.h b/arch/alpha/include/asm/cmpxchg.h index 46ebf14aed4e..8a2b331e43fe 100644 --- a/arch/alpha/include/asm/cmpxchg.h +++ b/arch/alpha/include/asm/cmpxchg.h | |||
@@ -6,7 +6,6 @@ | |||
6 | * Atomic exchange routines. | 6 | * Atomic exchange routines. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #define __ASM__MB | ||
10 | #define ____xchg(type, args...) __xchg ## type ## _local(args) | 9 | #define ____xchg(type, args...) __xchg ## type ## _local(args) |
11 | #define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args) | 10 | #define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args) |
12 | #include <asm/xchg.h> | 11 | #include <asm/xchg.h> |
@@ -33,10 +32,6 @@ | |||
33 | cmpxchg_local((ptr), (o), (n)); \ | 32 | cmpxchg_local((ptr), (o), (n)); \ |
34 | }) | 33 | }) |
35 | 34 | ||
36 | #ifdef CONFIG_SMP | ||
37 | #undef __ASM__MB | ||
38 | #define __ASM__MB "\tmb\n" | ||
39 | #endif | ||
40 | #undef ____xchg | 35 | #undef ____xchg |
41 | #undef ____cmpxchg | 36 | #undef ____cmpxchg |
42 | #define ____xchg(type, args...) __xchg ##type(args) | 37 | #define ____xchg(type, args...) __xchg ##type(args) |
@@ -64,7 +59,6 @@ | |||
64 | cmpxchg((ptr), (o), (n)); \ | 59 | cmpxchg((ptr), (o), (n)); \ |
65 | }) | 60 | }) |
66 | 61 | ||
67 | #undef __ASM__MB | ||
68 | #undef ____cmpxchg | 62 | #undef ____cmpxchg |
69 | 63 | ||
70 | #endif /* _ALPHA_CMPXCHG_H */ | 64 | #endif /* _ALPHA_CMPXCHG_H */ |
diff --git a/arch/alpha/include/asm/xchg.h b/arch/alpha/include/asm/xchg.h index e2660866ce97..e1facf6fc244 100644 --- a/arch/alpha/include/asm/xchg.h +++ b/arch/alpha/include/asm/xchg.h | |||
@@ -28,12 +28,12 @@ ____xchg(_u8, volatile char *m, unsigned long val) | |||
28 | " or %1,%2,%2\n" | 28 | " or %1,%2,%2\n" |
29 | " stq_c %2,0(%3)\n" | 29 | " stq_c %2,0(%3)\n" |
30 | " beq %2,2f\n" | 30 | " beq %2,2f\n" |
31 | __ASM__MB | ||
32 | ".subsection 2\n" | 31 | ".subsection 2\n" |
33 | "2: br 1b\n" | 32 | "2: br 1b\n" |
34 | ".previous" | 33 | ".previous" |
35 | : "=&r" (ret), "=&r" (val), "=&r" (tmp), "=&r" (addr64) | 34 | : "=&r" (ret), "=&r" (val), "=&r" (tmp), "=&r" (addr64) |
36 | : "r" ((long)m), "1" (val) : "memory"); | 35 | : "r" ((long)m), "1" (val) : "memory"); |
36 | smp_mb(); | ||
37 | 37 | ||
38 | return ret; | 38 | return ret; |
39 | } | 39 | } |
@@ -52,12 +52,12 @@ ____xchg(_u16, volatile short *m, unsigned long val) | |||
52 | " or %1,%2,%2\n" | 52 | " or %1,%2,%2\n" |
53 | " stq_c %2,0(%3)\n" | 53 | " stq_c %2,0(%3)\n" |
54 | " beq %2,2f\n" | 54 | " beq %2,2f\n" |
55 | __ASM__MB | ||
56 | ".subsection 2\n" | 55 | ".subsection 2\n" |
57 | "2: br 1b\n" | 56 | "2: br 1b\n" |
58 | ".previous" | 57 | ".previous" |
59 | : "=&r" (ret), "=&r" (val), "=&r" (tmp), "=&r" (addr64) | 58 | : "=&r" (ret), "=&r" (val), "=&r" (tmp), "=&r" (addr64) |
60 | : "r" ((long)m), "1" (val) : "memory"); | 59 | : "r" ((long)m), "1" (val) : "memory"); |
60 | smp_mb(); | ||
61 | 61 | ||
62 | return ret; | 62 | return ret; |
63 | } | 63 | } |
@@ -72,12 +72,12 @@ ____xchg(_u32, volatile int *m, unsigned long val) | |||
72 | " bis $31,%3,%1\n" | 72 | " bis $31,%3,%1\n" |
73 | " stl_c %1,%2\n" | 73 | " stl_c %1,%2\n" |
74 | " beq %1,2f\n" | 74 | " beq %1,2f\n" |
75 | __ASM__MB | ||
76 | ".subsection 2\n" | 75 | ".subsection 2\n" |
77 | "2: br 1b\n" | 76 | "2: br 1b\n" |
78 | ".previous" | 77 | ".previous" |
79 | : "=&r" (val), "=&r" (dummy), "=m" (*m) | 78 | : "=&r" (val), "=&r" (dummy), "=m" (*m) |
80 | : "rI" (val), "m" (*m) : "memory"); | 79 | : "rI" (val), "m" (*m) : "memory"); |
80 | smp_mb(); | ||
81 | 81 | ||
82 | return val; | 82 | return val; |
83 | } | 83 | } |
@@ -92,12 +92,12 @@ ____xchg(_u64, volatile long *m, unsigned long val) | |||
92 | " bis $31,%3,%1\n" | 92 | " bis $31,%3,%1\n" |
93 | " stq_c %1,%2\n" | 93 | " stq_c %1,%2\n" |
94 | " beq %1,2f\n" | 94 | " beq %1,2f\n" |
95 | __ASM__MB | ||
96 | ".subsection 2\n" | 95 | ".subsection 2\n" |
97 | "2: br 1b\n" | 96 | "2: br 1b\n" |
98 | ".previous" | 97 | ".previous" |
99 | : "=&r" (val), "=&r" (dummy), "=m" (*m) | 98 | : "=&r" (val), "=&r" (dummy), "=m" (*m) |
100 | : "rI" (val), "m" (*m) : "memory"); | 99 | : "rI" (val), "m" (*m) : "memory"); |
100 | smp_mb(); | ||
101 | 101 | ||
102 | return val; | 102 | return val; |
103 | } | 103 | } |
@@ -150,12 +150,12 @@ ____cmpxchg(_u8, volatile char *m, unsigned char old, unsigned char new) | |||
150 | " stq_c %2,0(%4)\n" | 150 | " stq_c %2,0(%4)\n" |
151 | " beq %2,3f\n" | 151 | " beq %2,3f\n" |
152 | "2:\n" | 152 | "2:\n" |
153 | __ASM__MB | ||
154 | ".subsection 2\n" | 153 | ".subsection 2\n" |
155 | "3: br 1b\n" | 154 | "3: br 1b\n" |
156 | ".previous" | 155 | ".previous" |
157 | : "=&r" (prev), "=&r" (new), "=&r" (tmp), "=&r" (cmp), "=&r" (addr64) | 156 | : "=&r" (prev), "=&r" (new), "=&r" (tmp), "=&r" (cmp), "=&r" (addr64) |
158 | : "r" ((long)m), "Ir" (old), "1" (new) : "memory"); | 157 | : "r" ((long)m), "Ir" (old), "1" (new) : "memory"); |
158 | smp_mb(); | ||
159 | 159 | ||
160 | return prev; | 160 | return prev; |
161 | } | 161 | } |
@@ -177,12 +177,12 @@ ____cmpxchg(_u16, volatile short *m, unsigned short old, unsigned short new) | |||
177 | " stq_c %2,0(%4)\n" | 177 | " stq_c %2,0(%4)\n" |
178 | " beq %2,3f\n" | 178 | " beq %2,3f\n" |
179 | "2:\n" | 179 | "2:\n" |
180 | __ASM__MB | ||
181 | ".subsection 2\n" | 180 | ".subsection 2\n" |
182 | "3: br 1b\n" | 181 | "3: br 1b\n" |
183 | ".previous" | 182 | ".previous" |
184 | : "=&r" (prev), "=&r" (new), "=&r" (tmp), "=&r" (cmp), "=&r" (addr64) | 183 | : "=&r" (prev), "=&r" (new), "=&r" (tmp), "=&r" (cmp), "=&r" (addr64) |
185 | : "r" ((long)m), "Ir" (old), "1" (new) : "memory"); | 184 | : "r" ((long)m), "Ir" (old), "1" (new) : "memory"); |
185 | smp_mb(); | ||
186 | 186 | ||
187 | return prev; | 187 | return prev; |
188 | } | 188 | } |
@@ -200,12 +200,12 @@ ____cmpxchg(_u32, volatile int *m, int old, int new) | |||
200 | " stl_c %1,%2\n" | 200 | " stl_c %1,%2\n" |
201 | " beq %1,3f\n" | 201 | " beq %1,3f\n" |
202 | "2:\n" | 202 | "2:\n" |
203 | __ASM__MB | ||
204 | ".subsection 2\n" | 203 | ".subsection 2\n" |
205 | "3: br 1b\n" | 204 | "3: br 1b\n" |
206 | ".previous" | 205 | ".previous" |
207 | : "=&r"(prev), "=&r"(cmp), "=m"(*m) | 206 | : "=&r"(prev), "=&r"(cmp), "=m"(*m) |
208 | : "r"((long) old), "r"(new), "m"(*m) : "memory"); | 207 | : "r"((long) old), "r"(new), "m"(*m) : "memory"); |
208 | smp_mb(); | ||
209 | 209 | ||
210 | return prev; | 210 | return prev; |
211 | } | 211 | } |
@@ -223,12 +223,12 @@ ____cmpxchg(_u64, volatile long *m, unsigned long old, unsigned long new) | |||
223 | " stq_c %1,%2\n" | 223 | " stq_c %1,%2\n" |
224 | " beq %1,3f\n" | 224 | " beq %1,3f\n" |
225 | "2:\n" | 225 | "2:\n" |
226 | __ASM__MB | ||
227 | ".subsection 2\n" | 226 | ".subsection 2\n" |
228 | "3: br 1b\n" | 227 | "3: br 1b\n" |
229 | ".previous" | 228 | ".previous" |
230 | : "=&r"(prev), "=&r"(cmp), "=m"(*m) | 229 | : "=&r"(prev), "=&r"(cmp), "=m"(*m) |
231 | : "r"((long) old), "r"(new), "m"(*m) : "memory"); | 230 | : "r"((long) old), "r"(new), "m"(*m) : "memory"); |
231 | smp_mb(); | ||
232 | 232 | ||
233 | return prev; | 233 | return prev; |
234 | } | 234 | } |