home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / spinlock_up.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.9 KB  |  75 lines

  1. #ifndef __LINUX_SPINLOCK_UP_H
  2. #define __LINUX_SPINLOCK_UP_H
  3.  
  4. #ifndef __LINUX_SPINLOCK_H
  5. # error "please don't include this file directly"
  6. #endif
  7.  
  8. /*
  9.  * include/linux/spinlock_up.h - UP-debug version of spinlocks.
  10.  *
  11.  * portions Copyright 2005, Red Hat, Inc., Ingo Molnar
  12.  * Released under the General Public License (GPL).
  13.  *
  14.  * In the debug case, 1 means unlocked, 0 means locked. (the values
  15.  * are inverted, to catch initialization bugs)
  16.  *
  17.  * No atomicity anywhere, we are on UP.
  18.  */
  19.  
  20. #ifdef CONFIG_DEBUG_SPINLOCK
  21.  
  22. #define __raw_spin_is_locked(x)        ((x)->slock == 0)
  23.  
  24. static inline void __raw_spin_lock(raw_spinlock_t *lock)
  25. {
  26.     lock->slock = 0;
  27. }
  28.  
  29. static inline void
  30. __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags)
  31. {
  32.     local_irq_save(flags);
  33.     lock->slock = 0;
  34. }
  35.  
  36. static inline int __raw_spin_trylock(raw_spinlock_t *lock)
  37. {
  38.     char oldval = lock->slock;
  39.  
  40.     lock->slock = 0;
  41.  
  42.     return oldval > 0;
  43. }
  44.  
  45. static inline void __raw_spin_unlock(raw_spinlock_t *lock)
  46. {
  47.     lock->slock = 1;
  48. }
  49.  
  50. /*
  51.  * Read-write spinlocks. No debug version.
  52.  */
  53. #define __raw_read_lock(lock)        do { (void)(lock); } while (0)
  54. #define __raw_write_lock(lock)        do { (void)(lock); } while (0)
  55. #define __raw_read_trylock(lock)    ({ (void)(lock); 1; })
  56. #define __raw_write_trylock(lock)    ({ (void)(lock); 1; })
  57. #define __raw_read_unlock(lock)        do { (void)(lock); } while (0)
  58. #define __raw_write_unlock(lock)    do { (void)(lock); } while (0)
  59.  
  60. #else /* DEBUG_SPINLOCK */
  61. #define __raw_spin_is_locked(lock)    ((void)(lock), 0)
  62. /* for sched.c and kernel_lock.c: */
  63. # define __raw_spin_lock(lock)        do { (void)(lock); } while (0)
  64. # define __raw_spin_unlock(lock)    do { (void)(lock); } while (0)
  65. # define __raw_spin_trylock(lock)    ({ (void)(lock); 1; })
  66. #endif /* DEBUG_SPINLOCK */
  67.  
  68. #define __raw_read_can_lock(lock)    (((void)(lock), 1))
  69. #define __raw_write_can_lock(lock)    (((void)(lock), 1))
  70.  
  71. #define __raw_spin_unlock_wait(lock) \
  72.         do { cpu_relax(); } while (__raw_spin_is_locked(lock))
  73.  
  74. #endif /* __LINUX_SPINLOCK_UP_H */
  75.