aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips
diff options
context:
space:
mode:
authorDeng-Cheng Zhu <dengcheng.zhu@imgtec.com>2015-03-07 13:30:20 -0500
committerRalf Baechle <ralf@linux-mips.org>2015-04-01 11:21:25 -0400
commite2093c7b03c116238dd8e36bdbe03fff97e1cae9 (patch)
tree1058900a586f6f8255d47fa4d3a0e5e72fe2f455 /arch/mips
parent96685b17108b4dbbbaea06307c3fcdb32eb152d0 (diff)
MIPS: Fall back to generic implementation of cmpxchg64 on 32-bit platforms
This is in preparation of adding HAVE_VIRT_CPU_ACCOUNTING_GEN support in the next patch. Without having cmpxchg64 to use the generic implementation, kernel linking will complain: kernel/built-in.o: In function `cputime_adjust': cputime.c:(.text+0x33748): undefined reference to `__cmpxchg_called_with_bad_pointer' cputime.c:(.text+0x33810): undefined reference to `__cmpxchg_called_with_bad_pointer' Signed-off-by: Deng-Cheng Zhu <dengcheng.zhu@imgtec.com> Cc: linux-mips@linux-mips.org Cc: macro@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/9474/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips')
-rw-r--r--arch/mips/include/asm/cmpxchg.h11
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/mips/include/asm/cmpxchg.h b/arch/mips/include/asm/cmpxchg.h
index d0a2a68ca600..412f945f1f5e 100644
--- a/arch/mips/include/asm/cmpxchg.h
+++ b/arch/mips/include/asm/cmpxchg.h
@@ -229,21 +229,22 @@ extern void __cmpxchg_called_with_bad_pointer(void);
229#define cmpxchg(ptr, old, new) __cmpxchg(ptr, old, new, smp_mb__before_llsc(), smp_llsc_mb()) 229#define cmpxchg(ptr, old, new) __cmpxchg(ptr, old, new, smp_mb__before_llsc(), smp_llsc_mb())
230#define cmpxchg_local(ptr, old, new) __cmpxchg(ptr, old, new, , ) 230#define cmpxchg_local(ptr, old, new) __cmpxchg(ptr, old, new, , )
231 231
232#define cmpxchg64(ptr, o, n) \ 232#ifdef CONFIG_64BIT
233#define cmpxchg64_local(ptr, o, n) \
233 ({ \ 234 ({ \
234 BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ 235 BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
235 cmpxchg((ptr), (o), (n)); \ 236 cmpxchg_local((ptr), (o), (n)); \
236 }) 237 })
237 238
238#ifdef CONFIG_64BIT 239#define cmpxchg64(ptr, o, n) \
239#define cmpxchg64_local(ptr, o, n) \
240 ({ \ 240 ({ \
241 BUILD_BUG_ON(sizeof(*(ptr)) != 8); \ 241 BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
242 cmpxchg_local((ptr), (o), (n)); \ 242 cmpxchg((ptr), (o), (n)); \
243 }) 243 })
244#else 244#else
245#include <asm-generic/cmpxchg-local.h> 245#include <asm-generic/cmpxchg-local.h>
246#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) 246#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
247#define cmpxchg64(ptr, o, n) cmpxchg64_local((ptr), (o), (n))
247#endif 248#endif
248 249
249#endif /* __ASM_CMPXCHG_H */ 250#endif /* __ASM_CMPXCHG_H */