diff options
-rw-r--r-- | include/asm-frv/system.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/include/asm-frv/system.h b/include/asm-frv/system.h index 9f5663ba19f8..59be5443a68f 100644 --- a/include/asm-frv/system.h +++ b/include/asm-frv/system.h | |||
@@ -268,5 +268,29 @@ extern uint32_t __cmpxchg_32(uint32_t *v, uint32_t test, uint32_t new); | |||
268 | 268 | ||
269 | #endif | 269 | #endif |
270 | 270 | ||
271 | #include <asm-generic/cmpxchg-local.h> | ||
272 | |||
273 | static inline unsigned long __cmpxchg_local(volatile void *ptr, | ||
274 | unsigned long old, | ||
275 | unsigned long new, int size) | ||
276 | { | ||
277 | switch (size) { | ||
278 | case 4: | ||
279 | return cmpxchg(ptr, old, new); | ||
280 | default: | ||
281 | return __cmpxchg_local_generic(ptr, old, new, size); | ||
282 | } | ||
283 | |||
284 | return old; | ||
285 | } | ||
286 | |||
287 | /* | ||
288 | * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make | ||
289 | * them available. | ||
290 | */ | ||
291 | #define cmpxchg_local(ptr, o, n) \ | ||
292 | ((__typeof__(*(ptr)))__cmpxchg_local((ptr), (unsigned long)(o), \ | ||
293 | (unsigned long)(n), sizeof(*(ptr)))) | ||
294 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||
271 | 295 | ||
272 | #endif /* _ASM_SYSTEM_H */ | 296 | #endif /* _ASM_SYSTEM_H */ |