diff options
Diffstat (limited to 'arch/mips/include/asm/atomic.h')
-rw-r--r-- | arch/mips/include/asm/atomic.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/mips/include/asm/atomic.h b/arch/mips/include/asm/atomic.h index 43fcd35e2957..94096299fc56 100644 --- a/arch/mips/include/asm/atomic.h +++ b/arch/mips/include/asm/atomic.h | |||
@@ -58,6 +58,7 @@ static __inline__ void atomic_##op(int i, atomic_t * v) \ | |||
58 | if (kernel_uses_llsc) { \ | 58 | if (kernel_uses_llsc) { \ |
59 | int temp; \ | 59 | int temp; \ |
60 | \ | 60 | \ |
61 | loongson_llsc_mb(); \ | ||
61 | __asm__ __volatile__( \ | 62 | __asm__ __volatile__( \ |
62 | " .set push \n" \ | 63 | " .set push \n" \ |
63 | " .set "MIPS_ISA_LEVEL" \n" \ | 64 | " .set "MIPS_ISA_LEVEL" \n" \ |
@@ -85,6 +86,7 @@ static __inline__ int atomic_##op##_return_relaxed(int i, atomic_t * v) \ | |||
85 | if (kernel_uses_llsc) { \ | 86 | if (kernel_uses_llsc) { \ |
86 | int temp; \ | 87 | int temp; \ |
87 | \ | 88 | \ |
89 | loongson_llsc_mb(); \ | ||
88 | __asm__ __volatile__( \ | 90 | __asm__ __volatile__( \ |
89 | " .set push \n" \ | 91 | " .set push \n" \ |
90 | " .set "MIPS_ISA_LEVEL" \n" \ | 92 | " .set "MIPS_ISA_LEVEL" \n" \ |
@@ -118,6 +120,7 @@ static __inline__ int atomic_fetch_##op##_relaxed(int i, atomic_t * v) \ | |||
118 | if (kernel_uses_llsc) { \ | 120 | if (kernel_uses_llsc) { \ |
119 | int temp; \ | 121 | int temp; \ |
120 | \ | 122 | \ |
123 | loongson_llsc_mb(); \ | ||
121 | __asm__ __volatile__( \ | 124 | __asm__ __volatile__( \ |
122 | " .set push \n" \ | 125 | " .set push \n" \ |
123 | " .set "MIPS_ISA_LEVEL" \n" \ | 126 | " .set "MIPS_ISA_LEVEL" \n" \ |
@@ -256,6 +259,7 @@ static __inline__ void atomic64_##op(long i, atomic64_t * v) \ | |||
256 | if (kernel_uses_llsc) { \ | 259 | if (kernel_uses_llsc) { \ |
257 | long temp; \ | 260 | long temp; \ |
258 | \ | 261 | \ |
262 | loongson_llsc_mb(); \ | ||
259 | __asm__ __volatile__( \ | 263 | __asm__ __volatile__( \ |
260 | " .set push \n" \ | 264 | " .set push \n" \ |
261 | " .set "MIPS_ISA_LEVEL" \n" \ | 265 | " .set "MIPS_ISA_LEVEL" \n" \ |
@@ -283,6 +287,7 @@ static __inline__ long atomic64_##op##_return_relaxed(long i, atomic64_t * v) \ | |||
283 | if (kernel_uses_llsc) { \ | 287 | if (kernel_uses_llsc) { \ |
284 | long temp; \ | 288 | long temp; \ |
285 | \ | 289 | \ |
290 | loongson_llsc_mb(); \ | ||
286 | __asm__ __volatile__( \ | 291 | __asm__ __volatile__( \ |
287 | " .set push \n" \ | 292 | " .set push \n" \ |
288 | " .set "MIPS_ISA_LEVEL" \n" \ | 293 | " .set "MIPS_ISA_LEVEL" \n" \ |
@@ -316,6 +321,7 @@ static __inline__ long atomic64_fetch_##op##_relaxed(long i, atomic64_t * v) \ | |||
316 | if (kernel_uses_llsc) { \ | 321 | if (kernel_uses_llsc) { \ |
317 | long temp; \ | 322 | long temp; \ |
318 | \ | 323 | \ |
324 | loongson_llsc_mb(); \ | ||
319 | __asm__ __volatile__( \ | 325 | __asm__ __volatile__( \ |
320 | " .set push \n" \ | 326 | " .set push \n" \ |
321 | " .set "MIPS_ISA_LEVEL" \n" \ | 327 | " .set "MIPS_ISA_LEVEL" \n" \ |