vserver 1.9.5.x5
[linux-2.6.git] / include / asm-sh / spinlock.h
index 31f45f2..e770b55 100644 (file)
@@ -17,6 +17,9 @@
  */
 typedef struct {
        volatile unsigned long lock;
+#ifdef CONFIG_PREEMPT
+       unsigned int break_lock;
+#endif
 } spinlock_t;
 
 #define SPIN_LOCK_UNLOCKED     (spinlock_t) { 0 }
@@ -48,9 +51,7 @@ static inline void _raw_spin_lock(spinlock_t *lock)
 
 static inline void _raw_spin_unlock(spinlock_t *lock)
 {
-#ifdef CONFIG_DEBUG_SPINLOCK
-       BUG_ON(!spin_is_locked(lock));
-#endif
+       assert_spin_locked(lock);
 
        lock->lock = 0;
 }
@@ -68,12 +69,14 @@ static inline void _raw_spin_unlock(spinlock_t *lock)
 typedef struct {
        spinlock_t lock;
        atomic_t counter;
+#ifdef CONFIG_PREEMPT
+       unsigned int break_lock;
+#endif
 } rwlock_t;
 
 #define RW_LOCK_BIAS           0x01000000
 #define RW_LOCK_UNLOCKED       (rwlock_t) { { 0 }, { RW_LOCK_BIAS } }
 #define rwlock_init(x)         do { *(x) = RW_LOCK_UNLOCKED; } while (0)
-#define rwlock_is_locked(x)    (atomic_read(&(x)->counter) != RW_LOCK_BIAS)
 
 static inline void _raw_read_lock(rwlock_t *rw)
 {
@@ -105,6 +108,8 @@ static inline void _raw_write_unlock(rwlock_t *rw)
        _raw_spin_unlock(&rw->lock);
 }
 
+#define _raw_read_trylock(lock) generic_raw_read_trylock(lock)
+
 static inline int _raw_write_trylock(rwlock_t *rw)
 {
        if (atomic_sub_and_test(RW_LOCK_BIAS, &rw->counter))