1 #ifndef __XFS_SUPPORT_ATOMIC_H__
4 #include <machine/atomic.h>
7 volatile unsigned int val;
10 #define atomic_read(v) ((v)->val)
11 #define atomic_set(v, i) ((v)->val = (i))
13 #define atomic_add(i, v) atomic_add_int(&(v)->val, (i))
14 #define atomic_inc(v) atomic_add_int(&(v)->val, 1)
15 #define atomic_dec(v) atomic_subtract_int(&(v)->val, 1)
16 #define atomic_sub(i, v) atomic_subtract_int(&(v)->val, (i))
17 #define atomic_dec_and_test(v) (atomic_fetchadd_int(&(v)->val, -1) == 1)
20 * This is used for two variables in XFS, one of which is a debug trace
24 static __inline__ int atomicIncWithWrap(volatile unsigned int *ip, int val)
26 unsigned int oldval, newval;
30 newval = (oldval + 1 >= val) ? 0 : oldval + 1;
31 } while (atomic_cmpset_rel_int(ip, oldval, newval) == 0);
36 #endif /* __XFS_SUPPORT_ATOMIC_H__ */