* [mips] Fix logic bug in atomic_sub_if_positive.

svn path=/dists/trunk/linux-2.6/; revision=11752
This commit is contained in:
Thiemo Seufer 2008-07-03 18:13:10 +00:00
parent d01ebeeb1d
commit 753608df16
3 changed files with 39 additions and 0 deletions

3
debian/changelog vendored
View File

@ -108,6 +108,9 @@ linux-2.6 (2.6.26~rc8-1~experimental.1) UNRELEASED; urgency=low
[ Christian T. Steigies ]
* [m68k] enable SERIAL_CONSOLE for amiga and atari
[ Thiemo Seufer ]
* [mips] Fix logic bug in atomic_sub_if_positive.
-- Christian T. Steigies <cts@debian.org> Thu, 12 Jun 2008 15:31:54 +0200
linux-2.6 (2.6.25-1~experimental.1) UNRELEASED; urgency=low

View File

@ -0,0 +1,35 @@
From: Morten Larsen <mlarsen@broadcom.com>
As far as I can tell the branch optimization fixes in 2.6.21 introduced
a bug in atomic_sub_if_positive that causes it to return even when the
sc instruction fails. The result is that e.g. down_trylock becomes
unreliable as the semaphore counter is not always decremented.
--- a/include/asm-mips/atomic.h 2008-06-25 22:38:43.159739000 -0700
+++ b/include/asm-mips/atomic.h 2008-06-25 22:39:07.552065000 -0700
@@ -292,10 +292,10 @@ static __inline__ int atomic_sub_if_posi
" beqz %0, 2f \n"
" subu %0, %1, %3 \n"
" .set reorder \n"
- "1: \n"
" .subsection 2 \n"
"2: b 1b \n"
" .previous \n"
+ "1: \n"
" .set mips0 \n"
: "=&r" (result), "=&r" (temp), "=m" (v->counter)
: "Ir" (i), "m" (v->counter)
@@ -682,10 +682,10 @@ static __inline__ long atomic64_sub_if_p
" beqz %0, 2f \n"
" dsubu %0, %1, %3 \n"
" .set reorder \n"
- "1: \n"
" .subsection 2 \n"
"2: b 1b \n"
" .previous \n"
+ "1: \n"
" .set mips0 \n"
: "=&r" (result), "=&r" (temp), "=m" (v->counter)
: "Ir" (i), "m" (v->counter)

View File

@ -26,6 +26,7 @@
+ bugfix/mips/ip22_cache_shift.patch
+ bugfix/mips/gbefb_fix_cmap_fifo_timeout.patch
+ bugfix/mips/ip32_enable_fast_20.patch
+ bugfix/mips/atomic_sub_if_positive.patch
+ bugfix/arm/disable-dvb_b2c2_flexcop.patch
+ bugfix/arm/disable-dvb_budget.patch
+ bugfix/arm/disable-netxen_nic.patch