aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-xtensa
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-xtensa')
-rw-r--r--include/asm-xtensa/system.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/include/asm-xtensa/system.h b/include/asm-xtensa/system.h
index ddc970847ae9..e0cb9116d8ab 100644
--- a/include/asm-xtensa/system.h
+++ b/include/asm-xtensa/system.h
@@ -156,8 +156,30 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size)
156 (unsigned long)_n_, sizeof (*(ptr))); \ 156 (unsigned long)_n_, sizeof (*(ptr))); \
157 }) 157 })
158 158
159#include <asm-generic/cmpxchg-local.h>
159 160
161static inline unsigned long __cmpxchg_local(volatile void *ptr,
162 unsigned long old,
163 unsigned long new, int size)
164{
165 switch (size) {
166 case 4:
167 return __cmpxchg_u32(ptr, old, new);
168 default:
169 return __cmpxchg_local_generic(ptr, old, new, size);
170 }
160 171
172 return old;
173}
174
175/*
176 * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make
177 * them available.
178 */
179#define cmpxchg_local(ptr, o, n) \
180 ((__typeof__(*(ptr)))__cmpxchg_local_generic((ptr), (unsigned long)(o),\
181 (unsigned long)(n), sizeof(*(ptr))))
182#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
161 183
162/* 184/*
163 * xchg_u32 185 * xchg_u32