X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-ppc64%2Fspinlock.h;h=a9b2a1162cf718f0529775cfd9788b4eee2013f9;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=45a6f7545f7dc7559b9a212a7feb332776307bd6;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/include/asm-ppc64/spinlock.h b/include/asm-ppc64/spinlock.h index 45a6f7545..a9b2a1162 100644 --- a/include/asm-ppc64/spinlock.h +++ b/include/asm-ppc64/spinlock.h @@ -23,10 +23,16 @@ 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) {