Home | History | Annotate | Line # | Download | only in libzpool
atomic.c revision 1.1
      1 
      2 #include <inttypes.h>
      3 #include <sys/atomic.h>
      4 
      5 /* XXX: Not so atomic, could use mutexes but not worth it */
      6 uint64_t
      7 atomic_cas_64(volatile uint64_t *ptr, uint64_t old, uint64_t new) {
      8 	uint64_t prev = *ptr;
      9 	if (prev == old)
     10 		*ptr = new;
     11 	return prev;
     12 }
     13 
     14 void
     15 atomic_add_64(volatile uint64_t *ptr, int64_t delta) {
     16 	*ptr += delta;
     17 }
     18 
     19 void
     20 atomic_inc_64(volatile uint64_t *ptr) {
     21 	++(*ptr);
     22 }
     23 
     24 void
     25 atomic_dec_64(volatile uint64_t *ptr) {
     26 	--(*ptr);
     27 }
     28 
     29 uint64_t
     30 atomic_add_64_nv(volatile uint64_t *ptr, int64_t delta) {
     31 	return *ptr += delta;
     32 }
     33