diff options
Diffstat (limited to 'sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c')
-rw-r--r-- | sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c b/sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c index 72d1557..4aba9ea 100644 --- a/sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c +++ b/sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c @@ -83,8 +83,7 @@ atomic_add_64_nv(volatile uint64_t *target, int64_t delta) return (newval); } -#if defined(__sparc64__) || defined(__powerpc__) || defined(__arm__) || \ - defined(__mips__) +#if defined(__powerpc__) || defined(__arm__) || defined(__mips__) void atomic_or_8(volatile uint8_t *target, uint8_t value) { @@ -105,27 +104,23 @@ atomic_or_8_nv(volatile uint8_t *target, uint8_t value) return (newval); } -#ifndef __LP64__ -void * -atomic_cas_ptr(volatile void *target, void *cmp, void *newval) +uint64_t +atomic_cas_64(volatile uint64_t *target, uint64_t cmp, uint64_t newval) { - void *oldval, **trg; + uint64_t oldval; mtx_lock(&atomic_mtx); - trg = __DEVOLATILE(void **, target); - oldval = *trg; + oldval = *target; if (oldval == cmp) - *trg = newval; + *target = newval; mtx_unlock(&atomic_mtx); return (oldval); } -#endif -#ifndef __sparc64__ -uint64_t -atomic_cas_64(volatile uint64_t *target, uint64_t cmp, uint64_t newval) +uint32_t +atomic_cas_32(volatile uint32_t *target, uint32_t cmp, uint32_t newval) { - uint64_t oldval; + uint32_t oldval; mtx_lock(&atomic_mtx); oldval = *target; @@ -134,7 +129,6 @@ atomic_cas_64(volatile uint64_t *target, uint64_t cmp, uint64_t newval) mtx_unlock(&atomic_mtx); return (oldval); } -#endif void membar_producer(void) |