diff options
author | Giuseppe CAVALLARO <peppe.cavallaro@st.com> | 2010-01-25 15:12:07 (GMT) |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-01-27 13:36:25 (GMT) |
commit | 7013109f52ff38ad9ea38952cedc144c8e8b9636 (patch) | |
tree | 17daafaa4cbff08d5db7481976ff91e8626ea3ba /arch/sh/include | |
parent | 660e2acad81c19b404f7d7d06e57a6d5e6ce7426 (diff) | |
download | linux-7013109f52ff38ad9ea38952cedc144c8e8b9636.tar.xz |
sh: fixed cmpxchg gRB version
This patch fixes a bug within the cmpxchg GRB version.
A problem was notices while running some tests to stress
the priority inheritance, for example pi_stress
(http://rt.wiki.kernel.org/index.php/PI_Mutex_Test).
Also, without this patch, after applying the latest work to
consolidate atomic_cmpxchg() definitions (commit:
8c0b8139c87cfe8b95c6e763b4ca3190aa9b1ad0)
the Kernel doesn't boot at all.
Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: Stuart Menefy <stuart.menefy@st.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/include')
-rw-r--r-- | arch/sh/include/asm/cmpxchg-grb.h | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/sh/include/asm/cmpxchg-grb.h b/arch/sh/include/asm/cmpxchg-grb.h index e2681ab..4676bf5 100644 --- a/arch/sh/include/asm/cmpxchg-grb.h +++ b/arch/sh/include/asm/cmpxchg-grb.h @@ -57,11 +57,10 @@ static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old, " mov.l @%1, %0 \n\t" /* load old value */ " cmp/eq %0, %2 \n\t" " bf 1f \n\t" /* if not equal */ - " mov.l %2, @%1 \n\t" /* store new value */ + " mov.l %3, @%1 \n\t" /* store new value */ "1: mov r1, r15 \n\t" /* LOGOUT */ - : "=&r" (retval), - "+r" (m) - : "r" (new) + : "=&r" (retval) + : "r" (m), "r" (old), "r" (new) : "memory" , "r0", "r1", "t"); return retval; |