diff options
Diffstat (limited to 'arch/mips/kernel/signal.c')
| -rw-r--r-- | arch/mips/kernel/signal.c | 17 | 
1 files changed, 6 insertions, 11 deletions
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c index bf792e2839a6..ae4231452115 100644 --- a/arch/mips/kernel/signal.c +++ b/arch/mips/kernel/signal.c @@ -195,6 +195,9 @@ static int restore_msa_extcontext(void __user *buf, unsigned int size)  	unsigned int csr;  	int i, err; +	if (!config_enabled(CONFIG_CPU_HAS_MSA)) +		return SIGSYS; +  	if (size != sizeof(*msa))  		return -EINVAL; @@ -398,8 +401,8 @@ int protected_restore_fp_context(void __user *sc)  	}  fp_done: -	if (used & USED_EXTCONTEXT) -		err |= restore_extcontext(sc_to_extcontext(sc)); +	if (!err && (used & USED_EXTCONTEXT)) +		err = restore_extcontext(sc_to_extcontext(sc));  	return err ?: sig;  } @@ -767,15 +770,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)  	sigset_t *oldset = sigmask_to_save();  	int ret;  	struct mips_abi *abi = current->thread.abi; -#ifdef CONFIG_CPU_MICROMIPS -	void *vdso; -	unsigned long tmp = (unsigned long)current->mm->context.vdso; - -	set_isa16_mode(tmp); -	vdso = (void *)tmp; -#else  	void *vdso = current->mm->context.vdso; -#endif  	if (regs->regs[0]) {  		switch(regs->regs[2]) { @@ -798,7 +793,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)  		regs->regs[0] = 0;		/* Don't deal with this again.	*/  	} -	if (sig_uses_siginfo(&ksig->ka)) +	if (sig_uses_siginfo(&ksig->ka, abi))  		ret = abi->setup_rt_frame(vdso + abi->vdso->off_rt_sigreturn,  					  ksig, regs, oldset);  	else  |