34 lines
1.0 KiB
C
34 lines
1.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_IA64_CMPXCHG_H
|
|
#define _ASM_IA64_CMPXCHG_H
|
|
|
|
#include <uapi/asm/cmpxchg.h>
|
|
|
|
#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 */
|