vserver 1.9.5.x5
[linux-2.6.git] / include / asm-ppc64 / spinlock.h
index 45a6f75..a9b2a11 100644 (file)
 
 typedef struct {
        volatile unsigned int lock;
+#ifdef CONFIG_PREEMPT
+       unsigned int break_lock;
+#endif
 } spinlock_t;
 
 typedef struct {
        volatile signed int lock;
+#ifdef CONFIG_PREEMPT
+       unsigned int break_lock;
+#endif
 } rwlock_t;
 
 #ifdef __KERNEL__
@@ -57,7 +63,7 @@ static __inline__ void _raw_spin_unlock(spinlock_t *lock)
 
 #if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES)
 /* We only yield to the hypervisor if we are in shared processor mode */
-#define SHARED_PROCESSOR (get_paca()->lppaca.xSharedProc)
+#define SHARED_PROCESSOR (get_paca()->lppaca.shared_proc)
 extern void __spin_yield(spinlock_t *lock);
 extern void __rw_yield(rwlock_t *lock);
 #else /* SPLPAR || ISERIES */
@@ -141,17 +147,9 @@ static void __inline__ _raw_spin_lock_flags(spinlock_t *lock, unsigned long flag
 #define RW_LOCK_UNLOCKED (rwlock_t) { 0 }
 
 #define rwlock_init(x)         do { *(x) = RW_LOCK_UNLOCKED; } while(0)
-#define rwlock_is_locked(x)    ((x)->lock)
 
-static __inline__ int is_read_locked(rwlock_t *rw)
-{
-       return rw->lock > 0;
-}
-
-static __inline__ int is_write_locked(rwlock_t *rw)
-{
-       return rw->lock < 0;
-}
+#define read_can_lock(rw)      ((rw)->lock >= 0)
+#define write_can_lock(rw)     (!(rw)->lock)
 
 static __inline__ void _raw_write_unlock(rwlock_t *rw)
 {