X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-sparc64%2Fspinlock.h;h=11efa474865bd20eef9b0a13f42749a6e999da2a;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=fb7c5b0ea6f108c92fd04d36511febf997cd030a;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/include/asm-sparc64/spinlock.h b/include/asm-sparc64/spinlock.h index fb7c5b0ea..11efa4748 100644 --- a/include/asm-sparc64/spinlock.h +++ b/include/asm-sparc64/spinlock.h @@ -142,7 +142,6 @@ extern int _do_spin_trylock (spinlock_t *lock); typedef unsigned int rwlock_t; #define RW_LOCK_UNLOCKED 0 #define rwlock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; } while(0) -#define rwlock_is_locked(x) (*(x) != RW_LOCK_UNLOCKED) static void inline __read_lock(rwlock_t *lock) { @@ -172,12 +171,13 @@ static void inline __read_unlock(rwlock_t *lock) unsigned long tmp1, tmp2; __asm__ __volatile__( +" membar #StoreLoad | #LoadLoad\n" "1: lduw [%2], %0\n" " sub %0, 1, %1\n" " cas [%2], %0, %1\n" " cmp %0, %1\n" " bne,pn %%xcc, 1b\n" -" membar #StoreLoad | #StoreStore" +" nop" : "=&r" (tmp1), "=&r" (tmp2) : "r" (lock) : "memory"); @@ -257,7 +257,6 @@ typedef struct { } rwlock_t; #define RW_LOCK_UNLOCKED (rwlock_t) { 0, 0, 0xff, { } } #define rwlock_init(lp) do { *(lp) = RW_LOCK_UNLOCKED; } while(0) -#define rwlock_is_locked(x) ((x)->lock != 0) extern void _do_read_lock(rwlock_t *rw, char *str); extern void _do_read_unlock(rwlock_t *rw, char *str); @@ -304,6 +303,8 @@ do { unsigned long flags; \ #endif /* CONFIG_DEBUG_SPINLOCK */ +#define _raw_read_trylock(lock) generic_raw_read_trylock(lock) + #endif /* !(__ASSEMBLY__) */ #endif /* !(__SPARC64_SPINLOCK_H) */