diff options
| -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 | } |
