diff options
Diffstat (limited to 'arch/microblaze/kernel/signal.c')
| -rw-r--r-- | arch/microblaze/kernel/signal.c | 41 | 
1 files changed, 8 insertions, 33 deletions
diff --git a/arch/microblaze/kernel/signal.c b/arch/microblaze/kernel/signal.c index 7f4c7bef164..76b9722557d 100644 --- a/arch/microblaze/kernel/signal.c +++ b/arch/microblaze/kernel/signal.c @@ -41,8 +41,6 @@  #include <asm/cacheflush.h>  #include <asm/syscalls.h> -#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) -  asmlinkage long  sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,  		struct pt_regs *regs) @@ -106,7 +104,6 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)  	if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))  		goto badframe; -	sigdelsetmask(&set, ~_BLOCKABLE);  	set_current_blocked(&set);  	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &rval)) @@ -310,10 +307,11 @@ do_restart:   * OK, we're invoking a handler   */ -static int +static void  handle_signal(unsigned long sig, struct k_sigaction *ka, -		siginfo_t *info, sigset_t *oldset, struct pt_regs *regs) +		siginfo_t *info, struct pt_regs *regs)  { +	sigset_t *oldset = sigmask_to_save();  	int ret;  	/* Set up the stack frame */ @@ -323,11 +321,9 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,  		ret = setup_rt_frame(sig, ka, NULL, oldset, regs);  	if (ret) -		return ret; - -	block_sigmask(ka, sig); +		return; -	return 0; +	signal_delivered(sig, info, ka, regs, 0);  }  /* @@ -344,33 +340,18 @@ static void do_signal(struct pt_regs *regs, int in_syscall)  	siginfo_t info;  	int signr;  	struct k_sigaction ka; -	sigset_t *oldset;  #ifdef DEBUG_SIG  	printk(KERN_INFO "do signal: %p %d\n", regs, in_syscall);  	printk(KERN_INFO "do signal2: %lx %lx %ld [%lx]\n", regs->pc, regs->r1,  			regs->r12, current_thread_info()->flags);  #endif -	if (current_thread_info()->status & TS_RESTORE_SIGMASK) -		oldset = ¤t->saved_sigmask; -	else -		oldset = ¤t->blocked; -  	signr = get_signal_to_deliver(&info, &ka, regs, NULL);  	if (signr > 0) {  		/* Whee! Actually deliver the signal. */  		if (in_syscall)  			handle_restart(regs, &ka, 1); -		if (!handle_signal(signr, &ka, &info, oldset, regs)) { -			/* -			 * A signal was successfully delivered; the saved -			 * sigmask will have been stored in the signal frame, -			 * and will be restored by sigreturn, so we can simply -			 * clear the TS_RESTORE_SIGMASK flag. -			 */ -			current_thread_info()->status &= -			    ~TS_RESTORE_SIGMASK; -		} +		handle_signal(signr, &ka, &info, regs);  		return;  	} @@ -381,10 +362,7 @@ static void do_signal(struct pt_regs *regs, int in_syscall)  	 * If there's no signal to deliver, we just put the saved sigmask  	 * back.  	 */ -	if (current_thread_info()->status & TS_RESTORE_SIGMASK) { -		current_thread_info()->status &= ~TS_RESTORE_SIGMASK; -		sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); -	} +	restore_saved_sigmask();  }  void do_notify_resume(struct pt_regs *regs, int in_syscall) @@ -401,9 +379,6 @@ void do_notify_resume(struct pt_regs *regs, int in_syscall)  	if (test_thread_flag(TIF_SIGPENDING))  		do_signal(regs, in_syscall); -	if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { +	if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME))  		tracehook_notify_resume(regs); -		if (current->replacement_session_keyring) -			key_replace_session_keyring(); -	}  }  |