summaryrefslogtreecommitdiff
path: root/arch/blackfin/mach-bf561/atomic.S
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2009-12-02 09:13:38 +0300
committerDavid S. Miller <davem@davemloft.net>2009-12-02 09:13:38 +0300
commitff9c38bba37937adb909cceb2a6521f2e92e17c6 (patch)
tree93bd6152d9fa28348be99ef1c788040cc7b7a94d /arch/blackfin/mach-bf561/atomic.S
parent65c0cfafce9575319fb6f70080fbe226e5617e3b (diff)
parentb2722b1c3a893ec6021508da15b32282ec79f4da (diff)
downloadlinux-ff9c38bba37937adb909cceb2a6521f2e92e17c6.tar.xz
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: net/mac80211/ht.c
Diffstat (limited to 'arch/blackfin/mach-bf561/atomic.S')
-rw-r--r--arch/blackfin/mach-bf561/atomic.S14
1 files changed, 12 insertions, 2 deletions
diff --git a/arch/blackfin/mach-bf561/atomic.S b/arch/blackfin/mach-bf561/atomic.S
index 0261a5e751b3..f99f174b129f 100644
--- a/arch/blackfin/mach-bf561/atomic.S
+++ b/arch/blackfin/mach-bf561/atomic.S
@@ -19,6 +19,16 @@
\reg\().h = _corelock;
.endm
+.macro safe_testset addr:req, scratch:req
+#if ANOMALY_05000477
+ cli \scratch;
+ testset (\addr);
+ sti \scratch;
+#else
+ testset (\addr);
+#endif
+.endm
+
/*
* r0 = address of atomic data to flush and invalidate (32bit).
*
@@ -33,7 +43,7 @@ ENTRY(_get_core_lock)
cli r0;
coreslot_loadaddr p0;
.Lretry_corelock:
- testset (p0);
+ safe_testset p0, r2;
if cc jump .Ldone_corelock;
SSYNC(r2);
jump .Lretry_corelock
@@ -56,7 +66,7 @@ ENTRY(_get_core_lock_noflush)
cli r0;
coreslot_loadaddr p0;
.Lretry_corelock_noflush:
- testset (p0);
+ safe_testset p0, r2;
if cc jump .Ldone_corelock_noflush;
SSYNC(r2);
jump .Lretry_corelock_noflush