1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _ASM_IA64_CMPXCHG_H 3 #define _ASM_IA64_CMPXCHG_H 4 5 #include <uapi/asm/cmpxchg.h> 6 7 #define arch_xchg(ptr, x) \ 8 ({(__typeof__(*(ptr))) __arch_xchg((unsigned long) (x), (ptr), sizeof(*(ptr)));}) 9 10 #define arch_cmpxchg(ptr, o, n) cmpxchg_acq((ptr), (o), (n)) 11 #define arch_cmpxchg64(ptr, o, n) cmpxchg_acq((ptr), (o), (n)) 12 13 #define arch_cmpxchg_local arch_cmpxchg 14 #define arch_cmpxchg64_local arch_cmpxchg64 15 16 #ifdef CONFIG_IA64_DEBUG_CMPXCHG 17 # define CMPXCHG_BUGCHECK_DECL int _cmpxchg_bugcheck_count = 128; 18 # define CMPXCHG_BUGCHECK(v) \ 19 do { \ 20 if (_cmpxchg_bugcheck_count-- <= 0) { \ 21 void *ip; \ 22 extern int _printk(const char *fmt, ...); \ 23 ip = (void *) ia64_getreg(_IA64_REG_IP); \ 24 _printk("CMPXCHG_BUGCHECK: stuck at %p on word %p\n", ip, (v));\ 25 break; \ 26 } \ 27 } while (0) 28 #else /* !CONFIG_IA64_DEBUG_CMPXCHG */ 29 # define CMPXCHG_BUGCHECK_DECL 30 # define CMPXCHG_BUGCHECK(v) 31 #endif /* !CONFIG_IA64_DEBUG_CMPXCHG */ 32 33 #endif /* _ASM_IA64_CMPXCHG_H */ 34