summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2006-10-03 14:13:09 +0900
committerPaul Mundt <lethal@linux-sh.org>2006-10-03 14:13:09 +0900
commitfac99d97469e7f91102f97101bea620e5f073196 (patch)
treedc1c9dfc3bebfb6fc0a2fd48b8f5c8b7a90c017a
parent2914d4da172f53f71d0563d3c3bae14e496cbc86 (diff)
downloadlinux-fac99d97469e7f91102f97101bea620e5f073196.tar.gz
linux-fac99d97469e7f91102f97101bea620e5f073196.tar.bz2
linux-fac99d97469e7f91102f97101bea620e5f073196.zip
sh: Fixup __raw_read_trylock().
generic__raw_read_trylock() was broken, fix up the __raw_read_trylock() implementation for something sensible. Taken from m32r, which has the same use cases. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r--include/asm-sh/spinlock.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/include/asm-sh/spinlock.h b/include/asm-sh/spinlock.h
index 54458fd24981..2586eef07d57 100644
--- a/include/asm-sh/spinlock.h
+++ b/include/asm-sh/spinlock.h
@@ -88,7 +88,14 @@ static inline void __raw_write_unlock(raw_rwlock_t *rw)
__raw_spin_unlock(&rw->lock);
}
-#define __raw_read_trylock(lock) generic__raw_read_trylock(lock)
+static inline int __raw_read_trylock(raw_rwlock_t *lock)
+{
+ atomic_t *count = (atomic_t*)lock;
+ if (atomic_dec_return(count) >= 0)
+ return 1;
+ atomic_inc(count);
+ return 0;
+}
static inline int __raw_write_trylock(raw_rwlock_t *rw)
{