aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68k
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@linux-m68k.org>2012-11-17 22:27:04 +0100
committerBen Hutchings <ben@decadent.org.uk>2012-12-06 11:20:16 +0000
commitfe16e58bbb29ec4a7893dc86da3b818005c0ff40 (patch)
treea1dfc16f0fe91ba661fbc0f17b9f88c61858f8a8 /arch/m68k
parent8d59e26fe9008e2382af445ed590446983614dfa (diff)
downloadkernel_samsung_smdk4412-fe16e58bbb29ec4a7893dc86da3b818005c0ff40.zip
kernel_samsung_smdk4412-fe16e58bbb29ec4a7893dc86da3b818005c0ff40.tar.gz
kernel_samsung_smdk4412-fe16e58bbb29ec4a7893dc86da3b818005c0ff40.tar.bz2
m68k: fix sigset_t accessor functions
commit 34fa78b59c52d1db3513db4c1a999db26b2e9ac2 upstream. The sigaddset/sigdelset/sigismember functions that are implemented with bitfield insn cannot allow the sigset argument to be placed in a data register since the sigset is wider than 32 bits. Remove the "d" constraint from the asm statements. The effect of the bug is that sending RT signals does not work, the signal number is truncated modulo 32. Signed-off-by: Andreas Schwab <schwab@linux-m68k.org> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'arch/m68k')
-rw-r--r--arch/m68k/include/asm/signal.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/m68k/include/asm/signal.h b/arch/m68k/include/asm/signal.h
index 60e8866..93fe83e 100644
--- a/arch/m68k/include/asm/signal.h
+++ b/arch/m68k/include/asm/signal.h
@@ -156,7 +156,7 @@ typedef struct sigaltstack {
static inline void sigaddset(sigset_t *set, int _sig)
{
asm ("bfset %0{%1,#1}"
- : "+od" (*set)
+ : "+o" (*set)
: "id" ((_sig - 1) ^ 31)
: "cc");
}
@@ -164,7 +164,7 @@ static inline void sigaddset(sigset_t *set, int _sig)
static inline void sigdelset(sigset_t *set, int _sig)
{
asm ("bfclr %0{%1,#1}"
- : "+od" (*set)
+ : "+o" (*set)
: "id" ((_sig - 1) ^ 31)
: "cc");
}
@@ -180,7 +180,7 @@ static inline int __gen_sigismember(sigset_t *set, int _sig)
int ret;
asm ("bfextu %1{%2,#1},%0"
: "=d" (ret)
- : "od" (*set), "id" ((_sig-1) ^ 31)
+ : "o" (*set), "id" ((_sig-1) ^ 31)
: "cc");
return ret;
}