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