All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] m68k: fix sigset_t accessor functions
@ 2012-11-17 21:27 Andreas Schwab
  2012-11-18  9:43 ` Geert Uytterhoeven
  0 siblings, 1 reply; 2+ messages in thread
From: Andreas Schwab @ 2012-11-17 21:27 UTC (permalink / raw)
  To: linux-m68k

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>
---
 arch/m68k/include/asm/signal.h | 6 +++---
 1 file 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;
 }
-- 
1.8.0


-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] m68k: fix sigset_t accessor functions
  2012-11-17 21:27 [PATCH] m68k: fix sigset_t accessor functions Andreas Schwab
@ 2012-11-18  9:43 ` Geert Uytterhoeven
  0 siblings, 0 replies; 2+ messages in thread
From: Geert Uytterhoeven @ 2012-11-18  9:43 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: linux-m68k, linux-kernel

Hi Andreas,

On Sat, Nov 17, 2012 at 10:27 PM, Andreas Schwab <schwab@linux-m68k.org> wrote:
> 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.

Thanks, applied and queued for 3.7 and stable.

> Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
> ---
>  arch/m68k/include/asm/signal.h | 6 +++---
>  1 file 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;
>  }

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-11-18  9:43 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-17 21:27 [PATCH] m68k: fix sigset_t accessor functions Andreas Schwab
2012-11-18  9:43 ` Geert Uytterhoeven

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.