From: Dave Johnson Date: Tue, 6 Mar 2007 01:50:27 +0000 (-0500) Subject: [MIPS] Fix __raw_read_trylock() to allow multiple readers X-Git-Tag: v2.6.21-rc3~15^2~2 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d52c2d5a626a2cb1848fa7063b3ab79e2752dac7;p=linux-2.6 [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: Dave Johnson Signed-off-by: Ralf Baechle --- diff --git a/include/asm-mips/spinlock.h b/include/asm-mips/spinlock.h index f1755d28a3..35e431cd79 100644 --- a/include/asm-mips/spinlock.h +++ b/include/asm-mips/spinlock.h @@ -287,7 +287,7 @@ static inline int __raw_read_trylock(raw_rwlock_t *rw) " .set noreorder # __raw_read_trylock \n" " li %2, 0 \n" "1: ll %1, %3 \n" - " bnez %1, 2f \n" + " bltz %1, 2f \n" " addu %1, 1 \n" " sc %1, %0 \n" " .set reorder \n" @@ -304,7 +304,7 @@ static inline int __raw_read_trylock(raw_rwlock_t *rw) " .set noreorder # __raw_read_trylock \n" " li %2, 0 \n" "1: ll %1, %3 \n" - " bnez %1, 2f \n" + " bltz %1, 2f \n" " addu %1, 1 \n" " sc %1, %0 \n" " beqz %1, 1b \n"