diff options
Diffstat (limited to 'arch/x86/kernel/signal.c')
| -rw-r--r-- | arch/x86/kernel/signal.c | 14 | 
1 files changed, 5 insertions, 9 deletions
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index 4fd173cd8e57..40a24932a8a1 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c @@ -601,10 +601,7 @@ long sys_rt_sigreturn(struct pt_regs *regs)  		goto badframe;  	sigdelsetmask(&set, ~_BLOCKABLE); -	spin_lock_irq(¤t->sighand->siglock); -	current->blocked = set; -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +	set_current_blocked(&set);  	if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))  		goto badframe; @@ -682,6 +679,7 @@ static int  handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,  	      sigset_t *oldset, struct pt_regs *regs)  { +	sigset_t blocked;  	int ret;  	/* Are we from a system call? */ @@ -741,12 +739,10 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,  	 */  	regs->flags &= ~X86_EFLAGS_TF; -	spin_lock_irq(¤t->sighand->siglock); -	sigorsets(¤t->blocked, ¤t->blocked, &ka->sa.sa_mask); +	sigorsets(&blocked, ¤t->blocked, &ka->sa.sa_mask);  	if (!(ka->sa.sa_flags & SA_NODEFER)) -		sigaddset(¤t->blocked, sig); -	recalc_sigpending(); -	spin_unlock_irq(¤t->sighand->siglock); +		sigaddset(&blocked, sig); +	set_current_blocked(&blocked);  	tracehook_signal_handler(sig, info, ka, regs,  				 test_thread_flag(TIF_SINGLESTEP));  |