Commit d52c2d5a authored by Dave Johnson's avatar Dave Johnson Committed by Ralf Baechle

[MIPS] Fix __raw_read_trylock() to allow multiple readers

A deadlock can occur for mixed irq and non-irq rwlock readers if a 2nd
reader attempts to take lock by looping around __raw_read_trylock().
Signed-off-by: default avatarDave Johnson <djohnson+linux-mips@sw.starentnetworks.com>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent d0c91ae2
...@@ -287,7 +287,7 @@ static inline int __raw_read_trylock(raw_rwlock_t *rw) ...@@ -287,7 +287,7 @@ static inline int __raw_read_trylock(raw_rwlock_t *rw)
" .set noreorder # __raw_read_trylock \n" " .set noreorder # __raw_read_trylock \n"
" li %2, 0 \n" " li %2, 0 \n"
"1: ll %1, %3 \n" "1: ll %1, %3 \n"
" bnez %1, 2f \n" " bltz %1, 2f \n"
" addu %1, 1 \n" " addu %1, 1 \n"
" sc %1, %0 \n" " sc %1, %0 \n"
" .set reorder \n" " .set reorder \n"
...@@ -304,7 +304,7 @@ static inline int __raw_read_trylock(raw_rwlock_t *rw) ...@@ -304,7 +304,7 @@ static inline int __raw_read_trylock(raw_rwlock_t *rw)
" .set noreorder # __raw_read_trylock \n" " .set noreorder # __raw_read_trylock \n"
" li %2, 0 \n" " li %2, 0 \n"
"1: ll %1, %3 \n" "1: ll %1, %3 \n"
" bnez %1, 2f \n" " bltz %1, 2f \n"
" addu %1, 1 \n" " addu %1, 1 \n"
" sc %1, %0 \n" " sc %1, %0 \n"
" beqz %1, 1b \n" " beqz %1, 1b \n"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment