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