@@ -28,12 +28,12 @@ ____xchg(_u8, volatile char *m, unsigned long val)
28
28
" or %1,%2,%2\n"
29
29
" stq_c %2,0(%3)\n"
30
30
" beq %2,2f\n"
31
- __ASM__MB
32
31
".subsection 2\n"
33
32
"2: br 1b\n"
34
33
".previous"
35
34
: "=&r" (ret ), "=&r" (val ), "=&r" (tmp ), "=&r" (addr64 )
36
35
: "r" ((long )m ), "1" (val ) : "memory" );
36
+ smp_mb ();
37
37
38
38
return ret ;
39
39
}
@@ -52,12 +52,12 @@ ____xchg(_u16, volatile short *m, unsigned long val)
52
52
" or %1,%2,%2\n"
53
53
" stq_c %2,0(%3)\n"
54
54
" beq %2,2f\n"
55
- __ASM__MB
56
55
".subsection 2\n"
57
56
"2: br 1b\n"
58
57
".previous"
59
58
: "=&r" (ret ), "=&r" (val ), "=&r" (tmp ), "=&r" (addr64 )
60
59
: "r" ((long )m ), "1" (val ) : "memory" );
60
+ smp_mb ();
61
61
62
62
return ret ;
63
63
}
@@ -72,12 +72,12 @@ ____xchg(_u32, volatile int *m, unsigned long val)
72
72
" bis $31,%3,%1\n"
73
73
" stl_c %1,%2\n"
74
74
" beq %1,2f\n"
75
- __ASM__MB
76
75
".subsection 2\n"
77
76
"2: br 1b\n"
78
77
".previous"
79
78
: "=&r" (val ), "=&r" (dummy ), "=m" (* m )
80
79
: "rI" (val ), "m" (* m ) : "memory" );
80
+ smp_mb ();
81
81
82
82
return val ;
83
83
}
@@ -92,12 +92,12 @@ ____xchg(_u64, volatile long *m, unsigned long val)
92
92
" bis $31,%3,%1\n"
93
93
" stq_c %1,%2\n"
94
94
" beq %1,2f\n"
95
- __ASM__MB
96
95
".subsection 2\n"
97
96
"2: br 1b\n"
98
97
".previous"
99
98
: "=&r" (val ), "=&r" (dummy ), "=m" (* m )
100
99
: "rI" (val ), "m" (* m ) : "memory" );
100
+ smp_mb ();
101
101
102
102
return val ;
103
103
}
@@ -150,12 +150,12 @@ ____cmpxchg(_u8, volatile char *m, unsigned char old, unsigned char new)
150
150
" stq_c %2,0(%4)\n"
151
151
" beq %2,3f\n"
152
152
"2:\n"
153
- __ASM__MB
154
153
".subsection 2\n"
155
154
"3: br 1b\n"
156
155
".previous"
157
156
: "=&r" (prev ), "=&r" (new ), "=&r" (tmp ), "=&r" (cmp ), "=&r" (addr64 )
158
157
: "r" ((long )m ), "Ir" (old ), "1" (new ) : "memory" );
158
+ smp_mb ();
159
159
160
160
return prev ;
161
161
}
@@ -177,12 +177,12 @@ ____cmpxchg(_u16, volatile short *m, unsigned short old, unsigned short new)
177
177
" stq_c %2,0(%4)\n"
178
178
" beq %2,3f\n"
179
179
"2:\n"
180
- __ASM__MB
181
180
".subsection 2\n"
182
181
"3: br 1b\n"
183
182
".previous"
184
183
: "=&r" (prev ), "=&r" (new ), "=&r" (tmp ), "=&r" (cmp ), "=&r" (addr64 )
185
184
: "r" ((long )m ), "Ir" (old ), "1" (new ) : "memory" );
185
+ smp_mb ();
186
186
187
187
return prev ;
188
188
}
@@ -200,12 +200,12 @@ ____cmpxchg(_u32, volatile int *m, int old, int new)
200
200
" stl_c %1,%2\n"
201
201
" beq %1,3f\n"
202
202
"2:\n"
203
- __ASM__MB
204
203
".subsection 2\n"
205
204
"3: br 1b\n"
206
205
".previous"
207
206
: "=&r" (prev ), "=&r" (cmp ), "=m" (* m )
208
207
: "r" ((long ) old ), "r" (new ), "m" (* m ) : "memory" );
208
+ smp_mb ();
209
209
210
210
return prev ;
211
211
}
@@ -223,12 +223,12 @@ ____cmpxchg(_u64, volatile long *m, unsigned long old, unsigned long new)
223
223
" stq_c %1,%2\n"
224
224
" beq %1,3f\n"
225
225
"2:\n"
226
- __ASM__MB
227
226
".subsection 2\n"
228
227
"3: br 1b\n"
229
228
".previous"
230
229
: "=&r" (prev ), "=&r" (cmp ), "=m" (* m )
231
230
: "r" ((long ) old ), "r" (new ), "m" (* m ) : "memory" );
231
+ smp_mb ();
232
232
233
233
return prev ;
234
234
}
0 commit comments