/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ASM_IA64_CMPXCHG_H #define _ASM_IA64_CMPXCHG_H #include #define arch_xchg(ptr, x) \ ({(__typeof__(*(ptr))) __arch_xchg((unsigned long) (x), (ptr), sizeof(*(ptr)));}) #define arch_cmpxchg(ptr, o, n) cmpxchg_acq((ptr), (o), (n)) #define arch_cmpxchg64(ptr, o, n) cmpxchg_acq((ptr), (o), (n)) #define arch_cmpxchg_local arch_cmpxchg #define arch_cmpxchg64_local arch_cmpxchg64 #ifdef CONFIG_IA64_DEBUG_CMPXCHG # define CMPXCHG_BUGCHECK_DECL int _cmpxchg_bugcheck_count = 128; # define CMPXCHG_BUGCHECK(v) \ do { \ if (_cmpxchg_bugcheck_count-- <= 0) { \ void *ip; \ extern int _printk(const char *fmt, ...); \ ip = (void *) ia64_getreg(_IA64_REG_IP); \ _printk("CMPXCHG_BUGCHECK: stuck at %p on word %p\n", ip, (v));\ break; \ } \ } while (0) #else /* !CONFIG_IA64_DEBUG_CMPXCHG */ # define CMPXCHG_BUGCHECK_DECL # define CMPXCHG_BUGCHECK(v) #endif /* !CONFIG_IA64_DEBUG_CMPXCHG */ #endif /* _ASM_IA64_CMPXCHG_H */