aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrea Parri <parri.andrea@gmail.com>2018-02-22 04:24:29 -0500
committerIngo Molnar <mingo@kernel.org>2018-02-23 02:38:15 -0500
commit79d442461df7478cdd0c50d9b8a76f431f150fa3 (patch)
tree53ec8c34409ef60806faae9ee2bdff17c301875f
parentcb13b424e986aed68d74cbaec3449ea23c50e167 (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.h6
-rw-r--r--arch/alpha/include/asm/xchg.h16
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}