X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-ia64%2Fspinlock.h;h=909936f25512e8ebbc3967d0eb775a12c989dd03;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=a56a06665674769fb638475d31d238731fd9f482;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/include/asm-ia64/spinlock.h b/include/asm-ia64/spinlock.h index a56a06665..909936f25 100644 --- a/include/asm-ia64/spinlock.h +++ b/include/asm-ia64/spinlock.h @@ -19,6 +19,9 @@ typedef struct { volatile unsigned int lock; +#ifdef CONFIG_PREEMPT + unsigned int break_lock; +#endif } spinlock_t; #define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 } @@ -116,11 +119,15 @@ do { \ typedef struct { volatile unsigned int read_counter : 31; volatile unsigned int write_lock : 1; +#ifdef CONFIG_PREEMPT + unsigned int break_lock; +#endif } rwlock_t; #define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0 } #define rwlock_init(x) do { *(x) = RW_LOCK_UNLOCKED; } while(0) -#define rwlock_is_locked(x) (*(volatile int *) (x) != 0) +#define read_can_lock(rw) (*(volatile int *)(rw) >= 0) +#define write_can_lock(rw) (*(volatile int *)(rw) == 0) #define _raw_read_lock(rw) \ do { \ @@ -190,6 +197,8 @@ do { \ #endif /* !ASM_SUPPORTED */ +#define _raw_read_trylock(lock) generic_raw_read_trylock(lock) + #define _raw_write_unlock(x) \ ({ \ smp_mb__before_clear_bit(); /* need barrier before releasing lock... */ \