/* * PowerPC atomic operations */ #ifndef _ASM_PPC_ATOMIC_H_ #define _ASM_PPC_ATOMIC_H_ typedef struct { int counter; } atomic_t; #define ATOMIC_INIT(i) { (i) } /* * Make sure gcc doesn't try to be clever and move things around * on us. We need to use _exactly_ the address the user gave us, * not some alias that contains the same information. */ #define __atomic_fool_gcc(x) (*(struct { int a[100]; } *)x) #define atomic_read(v) ((v)->counter) #define atomic_set(v) (((v)->counter) = i) #define atomic_dec_return(v) ({atomic_sub(1,(v));(v);}) #define atomic_inc_return(v) ({atomic_add(1,(v));(v);}) #define atomic_inc(v) atomic_add(1,(v)) #define atomic_dec(v) atomic_sub(1,(v)) #endif