summaryrefslogtreecommitdiffstats
path: root/arch/sparc
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-08-17 17:09:53 -0700
committerDavid S. Miller <davem@davemloft.net>2010-08-17 17:09:53 -0700
commitef201bebe5afc91a2b99b45dacc8c6dd88ca9e58 (patch)
tree08b1a29f9110325e335cebe6cb88fd4f46f038ad /arch/sparc
parent8e8073a449b2e00641c095ad55bd56f43468daf9 (diff)
downloadlinux-ef201bebe5afc91a2b99b45dacc8c6dd88ca9e58.tar.gz
linux-ef201bebe5afc91a2b99b45dacc8c6dd88ca9e58.tar.bz2
linux-ef201bebe5afc91a2b99b45dacc8c6dd88ca9e58.zip
sparc64: Fix rwsem constant bug leading to hangs.
As noticed by Linus, it is critical that some of the rwsem constants be signed. Yet, hex constants are unsigned unless explicitly casted or negated. The most critical one is RWSEM_WAITING_BIAS. This bug was exacerbated by commit 424acaaeb3a3932d64a9b4bd59df6cf72c22d8f3 ("rwsem: wake queued readers when writer blocks on active read lock") Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc')
-rw-r--r--arch/sparc/include/asm/rwsem-const.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/sparc/include/asm/rwsem-const.h b/arch/sparc/include/asm/rwsem-const.h
index a303c9d64d84..e4c61a18bb28 100644
--- a/arch/sparc/include/asm/rwsem-const.h
+++ b/arch/sparc/include/asm/rwsem-const.h
@@ -5,7 +5,7 @@
#define RWSEM_UNLOCKED_VALUE 0x00000000
#define RWSEM_ACTIVE_BIAS 0x00000001
#define RWSEM_ACTIVE_MASK 0x0000ffff
-#define RWSEM_WAITING_BIAS 0xffff0000
+#define RWSEM_WAITING_BIAS (-0x00010000)
#define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS
#define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)