diff options
Diffstat (limited to 'arch/sparc/include/asm/spinlock_32.h')
| -rw-r--r-- | arch/sparc/include/asm/spinlock_32.h | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/sparc/include/asm/spinlock_32.h b/arch/sparc/include/asm/spinlock_32.h index 7f9b9dba38a..bcc98fc3528 100644 --- a/arch/sparc/include/asm/spinlock_32.h +++ b/arch/sparc/include/asm/spinlock_32.h @@ -9,6 +9,7 @@  #ifndef __ASSEMBLY__  #include <asm/psr.h> +#include <asm/processor.h> /* for cpu_relax */  #define arch_spin_is_locked(lock) (*((volatile unsigned char *)(lock)) != 0) @@ -130,6 +131,15 @@ static inline void arch_write_lock(arch_rwlock_t *rw)  	*(volatile __u32 *)&lp->lock = ~0U;  } +static void inline arch_write_unlock(arch_rwlock_t *lock) +{ +	__asm__ __volatile__( +"	st		%%g0, [%0]" +	: /* no outputs */ +	: "r" (lock) +	: "memory"); +} +  static inline int arch_write_trylock(arch_rwlock_t *rw)  {  	unsigned int val; @@ -174,8 +184,6 @@ static inline int __arch_read_trylock(arch_rwlock_t *rw)  	res; \  }) -#define arch_write_unlock(rw)	do { (rw)->lock = 0; } while(0) -  #define arch_spin_lock_flags(lock, flags) arch_spin_lock(lock)  #define arch_read_lock_flags(rw, flags)   arch_read_lock(rw)  #define arch_write_lock_flags(rw, flags)  arch_write_lock(rw)  | 
