Initial Contribution
msm-2.6.38: tag AU_LINUX_ANDROID_GINGERBREAD.02.03.04.00.142
Signed-off-by: Bryan Huntsman <bryanh@codeaurora.org>
diff --git a/arch/arm/include/asm/mutex.h b/arch/arm/include/asm/mutex.h
index 93226cf..fd3f17e 100644
--- a/arch/arm/include/asm/mutex.h
+++ b/arch/arm/include/asm/mutex.h
@@ -41,6 +41,8 @@
__res |= __ex_flag;
if (unlikely(__res != 0))
fail_fn(count);
+ else
+ smp_rmb();
}
static inline int
@@ -61,6 +63,9 @@
__res |= __ex_flag;
if (unlikely(__res != 0))
__res = fail_fn(count);
+ else
+ smp_rmb();
+
return __res;
}
@@ -74,6 +79,7 @@
{
int __ex_flag, __res, __orig;
+ smp_wmb();
__asm__ (
"ldrex %0, [%3] \n\t"
@@ -119,6 +125,8 @@
: "=&r" (__orig), "=&r" (__res), "=&r" (__ex_flag)
: "r" (&count->counter)
: "cc", "memory" );
+ if (__orig)
+ smp_rmb();
return __orig;
}