spinlock.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #ifndef __BFIN_SPINLOCK_H
  2. #define __BFIN_SPINLOCK_H
  3. #include <asm/atomic.h>
  4. asmlinkage int __raw_spin_is_locked_asm(volatile int *ptr);
  5. asmlinkage void __raw_spin_lock_asm(volatile int *ptr);
  6. asmlinkage int __raw_spin_trylock_asm(volatile int *ptr);
  7. asmlinkage void __raw_spin_unlock_asm(volatile int *ptr);
  8. asmlinkage void __raw_read_lock_asm(volatile int *ptr);
  9. asmlinkage int __raw_read_trylock_asm(volatile int *ptr);
  10. asmlinkage void __raw_read_unlock_asm(volatile int *ptr);
  11. asmlinkage void __raw_write_lock_asm(volatile int *ptr);
  12. asmlinkage int __raw_write_trylock_asm(volatile int *ptr);
  13. asmlinkage void __raw_write_unlock_asm(volatile int *ptr);
  14. static inline int __raw_spin_is_locked(raw_spinlock_t *lock)
  15. {
  16. return __raw_spin_is_locked_asm(&lock->lock);
  17. }
  18. static inline void __raw_spin_lock(raw_spinlock_t *lock)
  19. {
  20. __raw_spin_lock_asm(&lock->lock);
  21. }
  22. #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock)
  23. static inline int __raw_spin_trylock(raw_spinlock_t *lock)
  24. {
  25. return __raw_spin_trylock_asm(&lock->lock);
  26. }
  27. static inline void __raw_spin_unlock(raw_spinlock_t *lock)
  28. {
  29. __raw_spin_unlock_asm(&lock->lock);
  30. }
  31. static inline void __raw_spin_unlock_wait(raw_spinlock_t *lock)
  32. {
  33. while (__raw_spin_is_locked(lock))
  34. cpu_relax();
  35. }
  36. static inline int __raw_read_can_lock(raw_rwlock_t *rw)
  37. {
  38. return __raw_uncached_fetch_asm(&rw->lock) > 0;
  39. }
  40. static inline int __raw_write_can_lock(raw_rwlock_t *rw)
  41. {
  42. return __raw_uncached_fetch_asm(&rw->lock) == RW_LOCK_BIAS;
  43. }
  44. static inline void __raw_read_lock(raw_rwlock_t *rw)
  45. {
  46. __raw_read_lock_asm(&rw->lock);
  47. }
  48. static inline int __raw_read_trylock(raw_rwlock_t *rw)
  49. {
  50. return __raw_read_trylock_asm(&rw->lock);
  51. }
  52. static inline void __raw_read_unlock(raw_rwlock_t *rw)
  53. {
  54. __raw_read_unlock_asm(&rw->lock);
  55. }
  56. static inline void __raw_write_lock(raw_rwlock_t *rw)
  57. {
  58. __raw_write_lock_asm(&rw->lock);
  59. }
  60. static inline int __raw_write_trylock(raw_rwlock_t *rw)
  61. {
  62. return __raw_write_trylock_asm(&rw->lock);
  63. }
  64. static inline void __raw_write_unlock(raw_rwlock_t *rw)
  65. {
  66. __raw_write_unlock_asm(&rw->lock);
  67. }
  68. #define _raw_spin_relax(lock) cpu_relax()
  69. #define _raw_read_relax(lock) cpu_relax()
  70. #define _raw_write_relax(lock) cpu_relax()
  71. #endif /* !__BFIN_SPINLOCK_H */