Changeset View
Changeset View
Standalone View
Standalone View
sys/contrib/openzfs/include/os/freebsd/spl/sys/atomic.h
Show All 23 Lines | |||||
* SUCH DAMAGE. | * SUCH DAMAGE. | ||||
* | * | ||||
* $FreeBSD$ | * $FreeBSD$ | ||||
*/ | */ | ||||
#ifndef _OPENSOLARIS_SYS_ATOMIC_H_ | #ifndef _OPENSOLARIS_SYS_ATOMIC_H_ | ||||
#define _OPENSOLARIS_SYS_ATOMIC_H_ | #define _OPENSOLARIS_SYS_ATOMIC_H_ | ||||
#ifndef _STANDALONE | |||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <machine/atomic.h> | #include <machine/atomic.h> | ||||
#define atomic_sub_64 atomic_subtract_64 | #define atomic_sub_64 atomic_subtract_64 | ||||
#if defined(__i386__) && (defined(_KERNEL) || defined(KLD_MODULE)) | #if defined(__i386__) && (defined(_KERNEL) || defined(KLD_MODULE) || | ||||
#define I386_HAVE_ATOMIC64 | #define I386_HAVE_ATOMIC64 | ||||
#endif | #endif | ||||
#if defined(__i386__) || defined(__amd64__) || defined(__arm__) | #if defined(__i386__) || defined(__amd64__) || defined(__arm__) | ||||
/* No spurious failures from fcmpset. */ | /* No spurious failures from fcmpset. */ | ||||
#define STRONG_FCMPSET | #define STRONG_FCMPSET | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 127 Lines • ▼ Show 20 Lines | |||||
#else | #else | ||||
static __inline void * | static __inline void * | ||||
atomic_cas_ptr(volatile void *target, void *cmp, void *newval) | atomic_cas_ptr(volatile void *target, void *cmp, void *newval) | ||||
{ | { | ||||
return ((void *)atomic_cas_32((volatile uint32_t *)target, | return ((void *)atomic_cas_32((volatile uint32_t *)target, | ||||
(uint32_t)cmp, (uint32_t)newval)); | (uint32_t)cmp, (uint32_t)newval)); | ||||
} | } | ||||
#endif /* !defined(COMPAT_32BIT) && defined(__LP64__) */ | #endif /* !defined(COMPAT_32BIT) && defined(__LP64__) */ | ||||
#else /* _STANDALONE */ | |||||
/* | |||||
* sometimes atomic_add_64 is defined, sometimes not, but the following is always right | |||||
* for the boot loader. | |||||
*/ | |||||
#undef atomic_add_64 | |||||
#define atomic_add_64(ptr, val) *(ptr) += val | |||||
#endif /* !_STANDALONE */ | |||||
#endif /* !_OPENSOLARIS_SYS_ATOMIC_H_ */ | #endif /* !_OPENSOLARIS_SYS_ATOMIC_H_ */ |