1*cae68d4fSArnaldo Carvalho de Melo #ifndef _TOOLS_LINUX_ASM_GENERIC_BITOPS_ATOMIC_H_ 2*cae68d4fSArnaldo Carvalho de Melo #define _TOOLS_LINUX_ASM_GENERIC_BITOPS_ATOMIC_H_ 3*cae68d4fSArnaldo Carvalho de Melo 4*cae68d4fSArnaldo Carvalho de Melo #include <asm/types.h> 5*cae68d4fSArnaldo Carvalho de Melo 6*cae68d4fSArnaldo Carvalho de Melo static inline void set_bit(int nr, unsigned long *addr) 7*cae68d4fSArnaldo Carvalho de Melo { 8*cae68d4fSArnaldo Carvalho de Melo addr[nr / __BITS_PER_LONG] |= 1UL << (nr % __BITS_PER_LONG); 9*cae68d4fSArnaldo Carvalho de Melo } 10*cae68d4fSArnaldo Carvalho de Melo 11*cae68d4fSArnaldo Carvalho de Melo static inline void clear_bit(int nr, unsigned long *addr) 12*cae68d4fSArnaldo Carvalho de Melo { 13*cae68d4fSArnaldo Carvalho de Melo addr[nr / __BITS_PER_LONG] &= ~(1UL << (nr % __BITS_PER_LONG)); 14*cae68d4fSArnaldo Carvalho de Melo } 15*cae68d4fSArnaldo Carvalho de Melo 16*cae68d4fSArnaldo Carvalho de Melo static __always_inline int test_bit(unsigned int nr, const unsigned long *addr) 17*cae68d4fSArnaldo Carvalho de Melo { 18*cae68d4fSArnaldo Carvalho de Melo return ((1UL << (nr % __BITS_PER_LONG)) & 19*cae68d4fSArnaldo Carvalho de Melo (((unsigned long *)addr)[nr / __BITS_PER_LONG])) != 0; 20*cae68d4fSArnaldo Carvalho de Melo } 21*cae68d4fSArnaldo Carvalho de Melo 22*cae68d4fSArnaldo Carvalho de Melo #endif /* _TOOLS_LINUX_ASM_GENERIC_BITOPS_ATOMIC_H_ */ 23