diff options
| -rw-r--r-- | arch/mips/kernel/signal.c | 27 | ||||
| -rw-r--r-- | arch/mips/kernel/signal32.c | 20 | ||||
| -rw-r--r-- | arch/mips/kernel/signal_n32.c | 10 |
3 files changed, 11 insertions, 46 deletions
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c index 185ca00c4c84..d5a338a1739c 100644 --- a/arch/mips/kernel/signal.c +++ b/arch/mips/kernel/signal.c | |||
| @@ -257,11 +257,8 @@ asmlinkage int sys_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
| 257 | return -EFAULT; | 257 | return -EFAULT; |
| 258 | sigdelsetmask(&newset, ~_BLOCKABLE); | 258 | sigdelsetmask(&newset, ~_BLOCKABLE); |
| 259 | 259 | ||
| 260 | spin_lock_irq(¤t->sighand->siglock); | ||
| 261 | current->saved_sigmask = current->blocked; | 260 | current->saved_sigmask = current->blocked; |
| 262 | current->blocked = newset; | 261 | set_current_blocked(&newset); |
| 263 | recalc_sigpending(); | ||
| 264 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 265 | 262 | ||
| 266 | current->state = TASK_INTERRUPTIBLE; | 263 | current->state = TASK_INTERRUPTIBLE; |
| 267 | schedule(); | 264 | schedule(); |
| @@ -286,11 +283,8 @@ asmlinkage int sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
| 286 | return -EFAULT; | 283 | return -EFAULT; |
| 287 | sigdelsetmask(&newset, ~_BLOCKABLE); | 284 | sigdelsetmask(&newset, ~_BLOCKABLE); |
| 288 | 285 | ||
| 289 | spin_lock_irq(¤t->sighand->siglock); | ||
| 290 | current->saved_sigmask = current->blocked; | 286 | current->saved_sigmask = current->blocked; |
| 291 | current->blocked = newset; | 287 | set_current_blocked(&newset); |
| 292 | recalc_sigpending(); | ||
| 293 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 294 | 288 | ||
| 295 | current->state = TASK_INTERRUPTIBLE; | 289 | current->state = TASK_INTERRUPTIBLE; |
| 296 | schedule(); | 290 | schedule(); |
| @@ -362,10 +356,7 @@ asmlinkage void sys_sigreturn(nabi_no_regargs struct pt_regs regs) | |||
| 362 | goto badframe; | 356 | goto badframe; |
| 363 | 357 | ||
| 364 | sigdelsetmask(&blocked, ~_BLOCKABLE); | 358 | sigdelsetmask(&blocked, ~_BLOCKABLE); |
| 365 | spin_lock_irq(¤t->sighand->siglock); | 359 | set_current_blocked(&blocked); |
| 366 | current->blocked = blocked; | ||
| 367 | recalc_sigpending(); | ||
| 368 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 369 | 360 | ||
| 370 | sig = restore_sigcontext(®s, &frame->sf_sc); | 361 | sig = restore_sigcontext(®s, &frame->sf_sc); |
| 371 | if (sig < 0) | 362 | if (sig < 0) |
| @@ -401,10 +392,7 @@ asmlinkage void sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | |||
| 401 | goto badframe; | 392 | goto badframe; |
| 402 | 393 | ||
| 403 | sigdelsetmask(&set, ~_BLOCKABLE); | 394 | sigdelsetmask(&set, ~_BLOCKABLE); |
| 404 | spin_lock_irq(¤t->sighand->siglock); | 395 | set_current_blocked(&set); |
| 405 | current->blocked = set; | ||
| 406 | recalc_sigpending(); | ||
| 407 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 408 | 396 | ||
| 409 | sig = restore_sigcontext(®s, &frame->rs_uc.uc_mcontext); | 397 | sig = restore_sigcontext(®s, &frame->rs_uc.uc_mcontext); |
| 410 | if (sig < 0) | 398 | if (sig < 0) |
| @@ -580,12 +568,7 @@ static int handle_signal(unsigned long sig, siginfo_t *info, | |||
| 580 | if (ret) | 568 | if (ret) |
| 581 | return ret; | 569 | return ret; |
| 582 | 570 | ||
| 583 | spin_lock_irq(¤t->sighand->siglock); | 571 | block_sigmask(ka, sig); |
| 584 | sigorsets(¤t->blocked, ¤t->blocked, &ka->sa.sa_mask); | ||
| 585 | if (!(ka->sa.sa_flags & SA_NODEFER)) | ||
| 586 | sigaddset(¤t->blocked, sig); | ||
| 587 | recalc_sigpending(); | ||
| 588 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 589 | 572 | ||
| 590 | return ret; | 573 | return ret; |
| 591 | } | 574 | } |
diff --git a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c index 06b5da392e24..ac3b8d89aae5 100644 --- a/arch/mips/kernel/signal32.c +++ b/arch/mips/kernel/signal32.c | |||
| @@ -290,11 +290,8 @@ asmlinkage int sys32_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
| 290 | return -EFAULT; | 290 | return -EFAULT; |
| 291 | sigdelsetmask(&newset, ~_BLOCKABLE); | 291 | sigdelsetmask(&newset, ~_BLOCKABLE); |
| 292 | 292 | ||
| 293 | spin_lock_irq(¤t->sighand->siglock); | ||
| 294 | current->saved_sigmask = current->blocked; | 293 | current->saved_sigmask = current->blocked; |
| 295 | current->blocked = newset; | 294 | set_current_blocked(&newset); |
| 296 | recalc_sigpending(); | ||
| 297 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 298 | 295 | ||
| 299 | current->state = TASK_INTERRUPTIBLE; | 296 | current->state = TASK_INTERRUPTIBLE; |
| 300 | schedule(); | 297 | schedule(); |
| @@ -318,11 +315,8 @@ asmlinkage int sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
| 318 | return -EFAULT; | 315 | return -EFAULT; |
| 319 | sigdelsetmask(&newset, ~_BLOCKABLE); | 316 | sigdelsetmask(&newset, ~_BLOCKABLE); |
| 320 | 317 | ||
| 321 | spin_lock_irq(¤t->sighand->siglock); | ||
| 322 | current->saved_sigmask = current->blocked; | 318 | current->saved_sigmask = current->blocked; |
| 323 | current->blocked = newset; | 319 | set_current_blocked(&newset); |
| 324 | recalc_sigpending(); | ||
| 325 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 326 | 320 | ||
| 327 | current->state = TASK_INTERRUPTIBLE; | 321 | current->state = TASK_INTERRUPTIBLE; |
| 328 | schedule(); | 322 | schedule(); |
| @@ -488,10 +482,7 @@ asmlinkage void sys32_sigreturn(nabi_no_regargs struct pt_regs regs) | |||
| 488 | goto badframe; | 482 | goto badframe; |
| 489 | 483 | ||
| 490 | sigdelsetmask(&blocked, ~_BLOCKABLE); | 484 | sigdelsetmask(&blocked, ~_BLOCKABLE); |
| 491 | spin_lock_irq(¤t->sighand->siglock); | 485 | set_current_blocked(&blocked); |
| 492 | current->blocked = blocked; | ||
| 493 | recalc_sigpending(); | ||
| 494 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 495 | 486 | ||
| 496 | sig = restore_sigcontext32(®s, &frame->sf_sc); | 487 | sig = restore_sigcontext32(®s, &frame->sf_sc); |
| 497 | if (sig < 0) | 488 | if (sig < 0) |
| @@ -529,10 +520,7 @@ asmlinkage void sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | |||
| 529 | goto badframe; | 520 | goto badframe; |
| 530 | 521 | ||
| 531 | sigdelsetmask(&set, ~_BLOCKABLE); | 522 | sigdelsetmask(&set, ~_BLOCKABLE); |
| 532 | spin_lock_irq(¤t->sighand->siglock); | 523 | set_current_blocked(&set); |
| 533 | current->blocked = set; | ||
| 534 | recalc_sigpending(); | ||
| 535 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 536 | 524 | ||
| 537 | sig = restore_sigcontext32(®s, &frame->rs_uc.uc_mcontext); | 525 | sig = restore_sigcontext32(®s, &frame->rs_uc.uc_mcontext); |
| 538 | if (sig < 0) | 526 | if (sig < 0) |
diff --git a/arch/mips/kernel/signal_n32.c b/arch/mips/kernel/signal_n32.c index ae29e894ab8d..86eb4b04631c 100644 --- a/arch/mips/kernel/signal_n32.c +++ b/arch/mips/kernel/signal_n32.c | |||
| @@ -93,11 +93,8 @@ asmlinkage int sysn32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) | |||
| 93 | sigset_from_compat(&newset, &uset); | 93 | sigset_from_compat(&newset, &uset); |
| 94 | sigdelsetmask(&newset, ~_BLOCKABLE); | 94 | sigdelsetmask(&newset, ~_BLOCKABLE); |
| 95 | 95 | ||
| 96 | spin_lock_irq(¤t->sighand->siglock); | ||
| 97 | current->saved_sigmask = current->blocked; | 96 | current->saved_sigmask = current->blocked; |
| 98 | current->blocked = newset; | 97 | set_current_blocked(&newset); |
| 99 | recalc_sigpending(); | ||
| 100 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 101 | 98 | ||
| 102 | current->state = TASK_INTERRUPTIBLE; | 99 | current->state = TASK_INTERRUPTIBLE; |
| 103 | schedule(); | 100 | schedule(); |
| @@ -121,10 +118,7 @@ asmlinkage void sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) | |||
| 121 | goto badframe; | 118 | goto badframe; |
| 122 | 119 | ||
| 123 | sigdelsetmask(&set, ~_BLOCKABLE); | 120 | sigdelsetmask(&set, ~_BLOCKABLE); |
| 124 | spin_lock_irq(¤t->sighand->siglock); | 121 | set_current_blocked(&set); |
| 125 | current->blocked = set; | ||
| 126 | recalc_sigpending(); | ||
| 127 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 128 | 122 | ||
| 129 | sig = restore_sigcontext(®s, &frame->rs_uc.uc_mcontext); | 123 | sig = restore_sigcontext(®s, &frame->rs_uc.uc_mcontext); |
| 130 | if (sig < 0) | 124 | if (sig < 0) |
