On 06/26, Ralf Baechle wrote: > > On Wed, Jun 26, 2013 at 06:14:52PM +0200, Oleg Nesterov wrote: > > > Or simply remove the BUG_ON(), this can equally confuse wait(status). > > 128 & 0x7f == 0. > > > > Still I think it would be better to change _NSIG on mips. > > If it was that easy. That's going to outright break binary compatibility, > see kernel/signal.c: > > SYSCALL_DEFINE4(rt_sigprocmask, int, how, sigset_t __user *, nset, > sigset_t __user *, oset, size_t, sigsetsize) > { > sigset_t old_set, new_set; > int error; > > /* XXX: Don't preclude handling different sized sigset_t's. */ > if (sigsetsize != sizeof(sigset_t)) > return -EINVAL; I meant the minimal hack like --- x/arch/mips/include/uapi/asm/signal.h +++ x/arch/mips/include/uapi/asm/signal.h @@ -11,9 +11,9 @@ #include <linux/types.h> -#define _NSIG 128 +#define _NSIG 127 #define _NSIG_BPW (sizeof(unsigned long) * 8) -#define _NSIG_WORDS (_NSIG / _NSIG_BPW) +#define _NSIG_WORDS DIV_ROUND_UP(_NSIG / _NSIG_BPW) typedef struct { unsigned long sig[_NSIG_WORDS]; just to avoid BUG_ON(). I agree that _NSIG == 126 or 64 needs more discussion. Although personally I think this is the only choice in the long term, or we should change ABI and break user-space completely. And, just in case, the hack above doesn't kill SIG_128 completely. Say, the task can block/unblock it. Oleg.