lock.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifndef _ASM_GENERIC_BITOPS_LOCK_H_
  2. #define _ASM_GENERIC_BITOPS_LOCK_H_
  3. /**
  4. * test_and_set_bit_lock - Set a bit and return its old value, for lock
  5. * @nr: Bit to set
  6. * @addr: Address to count from
  7. *
  8. * This operation is atomic and provides acquire barrier semantics.
  9. * It can be used to implement bit locks.
  10. */
  11. #define test_and_set_bit_lock(nr, addr) test_and_set_bit(nr, addr)
  12. /**
  13. * clear_bit_unlock - Clear a bit in memory, for unlock
  14. * @nr: the bit to set
  15. * @addr: the address to start counting from
  16. *
  17. * This operation is atomic and provides release barrier semantics.
  18. */
  19. #define clear_bit_unlock(nr, addr) \
  20. do { \
  21. smp_mb__before_atomic(); \
  22. clear_bit(nr, addr); \
  23. } while (0)
  24. /**
  25. * __clear_bit_unlock - Clear a bit in memory, for unlock
  26. * @nr: the bit to set
  27. * @addr: the address to start counting from
  28. *
  29. * A weaker form of clear_bit_unlock() as used by __bit_lock_unlock(). If all
  30. * the bits in the word are protected by this lock some archs can use weaker
  31. * ops to safely unlock.
  32. *
  33. * See for example x86's implementation.
  34. */
  35. #define __clear_bit_unlock(nr, addr) \
  36. do { \
  37. smp_mb__before_atomic(); \
  38. clear_bit(nr, addr); \
  39. } while (0)
  40. #endif /* _ASM_GENERIC_BITOPS_LOCK_H_ */