spinlock_api_up.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #ifndef __LINUX_SPINLOCK_API_UP_H
  2. #define __LINUX_SPINLOCK_API_UP_H
  3. #ifndef __LINUX_SPINLOCK_H
  4. # error "please don't include this file directly"
  5. #endif
  6. /*
  7. * include/linux/spinlock_api_up.h
  8. *
  9. * spinlock API implementation on UP-nondebug (inlined implementation)
  10. *
  11. * portions Copyright 2005, Red Hat, Inc., Ingo Molnar
  12. * Released under the General Public License (GPL).
  13. */
  14. #define in_lock_functions(ADDR) 0
  15. #define assert_spin_locked(lock) do { (void)(lock); } while (0)
  16. /*
  17. * In the UP-nondebug case there's no real locking going on, so the
  18. * only thing we have to do is to keep the preempt counts and irq
  19. * flags straight, to supress compiler warnings of unused lock
  20. * variables, and to add the proper checker annotations:
  21. */
  22. #define __LOCK(lock) \
  23. do { preempt_disable(); __acquire(lock); (void)(lock); } while (0)
  24. #define __LOCK_BH(lock) \
  25. do { local_bh_disable(); __LOCK(lock); } while (0)
  26. #define __LOCK_IRQ(lock) \
  27. do { local_irq_disable(); __LOCK(lock); } while (0)
  28. #define __LOCK_IRQSAVE(lock, flags) \
  29. do { local_irq_save(flags); __LOCK(lock); } while (0)
  30. #define __UNLOCK(lock) \
  31. do { preempt_enable(); __release(lock); (void)(lock); } while (0)
  32. #define __UNLOCK_BH(lock) \
  33. do { preempt_enable_no_resched(); local_bh_enable(); __release(lock); (void)(lock); } while (0)
  34. #define __UNLOCK_IRQ(lock) \
  35. do { local_irq_enable(); __UNLOCK(lock); } while (0)
  36. #define __UNLOCK_IRQRESTORE(lock, flags) \
  37. do { local_irq_restore(flags); __UNLOCK(lock); } while (0)
  38. #define _spin_lock(lock) __LOCK(lock)
  39. #define _spin_lock_nested(lock, subclass) __LOCK(lock)
  40. #define _read_lock(lock) __LOCK(lock)
  41. #define _write_lock(lock) __LOCK(lock)
  42. #define _spin_lock_bh(lock) __LOCK_BH(lock)
  43. #define _read_lock_bh(lock) __LOCK_BH(lock)
  44. #define _write_lock_bh(lock) __LOCK_BH(lock)
  45. #define _spin_lock_irq(lock) __LOCK_IRQ(lock)
  46. #define _read_lock_irq(lock) __LOCK_IRQ(lock)
  47. #define _write_lock_irq(lock) __LOCK_IRQ(lock)
  48. #define _spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags)
  49. #define _read_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags)
  50. #define _write_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags)
  51. #define _spin_trylock(lock) ({ __LOCK(lock); 1; })
  52. #define _read_trylock(lock) ({ __LOCK(lock); 1; })
  53. #define _write_trylock(lock) ({ __LOCK(lock); 1; })
  54. #define _spin_trylock_bh(lock) ({ __LOCK_BH(lock); 1; })
  55. #define _spin_unlock(lock) __UNLOCK(lock)
  56. #define _read_unlock(lock) __UNLOCK(lock)
  57. #define _write_unlock(lock) __UNLOCK(lock)
  58. #define _spin_unlock_bh(lock) __UNLOCK_BH(lock)
  59. #define _write_unlock_bh(lock) __UNLOCK_BH(lock)
  60. #define _read_unlock_bh(lock) __UNLOCK_BH(lock)
  61. #define _spin_unlock_irq(lock) __UNLOCK_IRQ(lock)
  62. #define _read_unlock_irq(lock) __UNLOCK_IRQ(lock)
  63. #define _write_unlock_irq(lock) __UNLOCK_IRQ(lock)
  64. #define _spin_unlock_irqrestore(lock, flags) __UNLOCK_IRQRESTORE(lock, flags)
  65. #define _read_unlock_irqrestore(lock, flags) __UNLOCK_IRQRESTORE(lock, flags)
  66. #define _write_unlock_irqrestore(lock, flags) __UNLOCK_IRQRESTORE(lock, flags)
  67. #endif /* __LINUX_SPINLOCK_API_UP_H */