atomic.h 781 B

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