Index: atomic.h =================================================================== RCS file: /cvs/src/sys/sys/atomic.h,v retrieving revision 1.1 diff -u -p -r1.1 atomic.h --- atomic.h 30 Jan 2014 00:44:20 -0000 1.1 +++ atomic.h 10 Feb 2015 11:25:32 -0000 @@ -31,7 +31,7 @@ #ifndef atomic_cas_uint static inline unsigned int -atomic_cas_uint(unsigned int *p, unsigned int o, unsigned int n) +atomic_cas_uint(volatile unsigned int *p, unsigned int o, unsigned int n) { return __sync_val_compare_and_swap(p, o, n); } @@ -39,7 +39,7 @@ atomic_cas_uint(unsigned int *p, unsigne #ifndef atomic_cas_ulong static inline unsigned long -atomic_cas_ulong(unsigned long *p, unsigned long o, unsigned long n) +atomic_cas_ulong(volatile unsigned long *p, unsigned long o, unsigned long n) { return __sync_val_compare_and_swap(p, o, n); } @@ -47,8 +47,9 @@ atomic_cas_ulong(unsigned long *p, unsig #ifndef atomic_cas_ptr static inline void * -atomic_cas_ptr(void **p, void *o, void *n) +atomic_cas_ptr(volatile void *pp, void *o, void *n) { + void * volatile *p = pp; return __sync_val_compare_and_swap(p, o, n); } #endif @@ -59,7 +60,7 @@ atomic_cas_ptr(void **p, void *o, void * #ifndef atomic_swap_uint static inline unsigned int -atomic_swap_uint(unsigned int *p, unsigned int v) +atomic_swap_uint(volatile unsigned int *p, unsigned int v) { return __sync_lock_test_and_set(p, v); } @@ -67,7 +68,7 @@ atomic_swap_uint(unsigned int *p, unsign #ifndef atomic_swap_ulong static inline unsigned long -atomic_swap_ulong(unsigned long *p, unsigned long v) +atomic_swap_ulong(volatile unsigned long *p, unsigned long v) { return __sync_lock_test_and_set(p, v); } @@ -75,8 +76,9 @@ atomic_swap_ulong(unsigned long *p, unsi #ifndef atomic_swap_ptr static inline void * -atomic_swap_ptr(void **p, void *v) +atomic_swap_ptr(volatile void *p, void *v) { + void * volatile *p = pp; return __sync_lock_test_and_set(p, v); } #endif @@ -95,7 +97,7 @@ atomic_add_int_nv(volatile unsigned int #ifndef atomic_add_long_nv static inline unsigned long -atomic_add_long_nv(unsigned long *p, unsigned long v) +atomic_add_long_nv(volatile unsigned long *p, unsigned long v) { return __sync_add_and_fetch(p, v); }