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) \ 19do { \ 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