[MIPS] Replace generic__raw_read_trylock usage
generic__raw_read_trylock() is a defect generic function actually doing a __raw_read_lock ... Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
09f451bfb9
commit
65316fd13a
1 changed files with 46 additions and 1 deletions
|
@ -239,7 +239,51 @@ static inline void __raw_write_unlock(raw_rwlock_t *rw)
|
||||||
: "memory");
|
: "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define __raw_read_trylock(lock) generic__raw_read_trylock(lock)
|
static inline int __raw_read_trylock(raw_rwlock_t *rw)
|
||||||
|
{
|
||||||
|
unsigned int tmp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (R10000_LLSC_WAR) {
|
||||||
|
__asm__ __volatile__(
|
||||||
|
" .set noreorder # __raw_read_trylock \n"
|
||||||
|
" li %2, 0 \n"
|
||||||
|
"1: ll %1, %3 \n"
|
||||||
|
" bnez %1, 2f \n"
|
||||||
|
" addu %1, 1 \n"
|
||||||
|
" sc %1, %0 \n"
|
||||||
|
" beqzl %1, 1b \n"
|
||||||
|
" .set reorder \n"
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
" sync \n"
|
||||||
|
#endif
|
||||||
|
" li %2, 1 \n"
|
||||||
|
"2: \n"
|
||||||
|
: "=m" (rw->lock), "=&r" (tmp), "=&r" (ret)
|
||||||
|
: "m" (rw->lock)
|
||||||
|
: "memory");
|
||||||
|
} else {
|
||||||
|
__asm__ __volatile__(
|
||||||
|
" .set noreorder # __raw_read_trylock \n"
|
||||||
|
" li %2, 0 \n"
|
||||||
|
"1: ll %1, %3 \n"
|
||||||
|
" bnez %1, 2f \n"
|
||||||
|
" addu %1, 1 \n"
|
||||||
|
" sc %1, %0 \n"
|
||||||
|
" beqz %1, 1b \n"
|
||||||
|
" .set reorder \n"
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
" sync \n"
|
||||||
|
#endif
|
||||||
|
" li %2, 1 \n"
|
||||||
|
"2: \n"
|
||||||
|
: "=m" (rw->lock), "=&r" (tmp), "=&r" (ret)
|
||||||
|
: "m" (rw->lock)
|
||||||
|
: "memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int __raw_write_trylock(raw_rwlock_t *rw)
|
static inline int __raw_write_trylock(raw_rwlock_t *rw)
|
||||||
{
|
{
|
||||||
|
@ -283,4 +327,5 @@ static inline int __raw_write_trylock(raw_rwlock_t *rw)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* _ASM_SPINLOCK_H */
|
#endif /* _ASM_SPINLOCK_H */
|
||||||
|
|
Loading…
Add table
Reference in a new issue