|
@@ -252,8 +252,7 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs);
|
|
|
/*
|
|
|
* Atomically swap in the new signal mask, and wait for a signal.
|
|
|
*/
|
|
|
-long sys_sigsuspend(old_sigset_t mask, int p2, int p3, int p4, int p6, int p7,
|
|
|
- struct pt_regs *regs)
|
|
|
+long sys_sigsuspend(old_sigset_t mask)
|
|
|
{
|
|
|
sigset_t saveset;
|
|
|
|
|
@@ -264,55 +263,10 @@ long sys_sigsuspend(old_sigset_t mask, int p2, int p3, int p4, int p6, int p7,
|
|
|
recalc_sigpending();
|
|
|
spin_unlock_irq(¤t->sighand->siglock);
|
|
|
|
|
|
- regs->result = -EINTR;
|
|
|
- regs->gpr[3] = EINTR;
|
|
|
- regs->ccr |= 0x10000000;
|
|
|
- while (1) {
|
|
|
- current->state = TASK_INTERRUPTIBLE;
|
|
|
- schedule();
|
|
|
- if (do_signal(&saveset, regs)) {
|
|
|
- set_thread_flag(TIF_RESTOREALL);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-long sys_rt_sigsuspend(
|
|
|
-#ifdef CONFIG_PPC64
|
|
|
- compat_sigset_t __user *unewset,
|
|
|
-#else
|
|
|
- sigset_t __user *unewset,
|
|
|
-#endif
|
|
|
- size_t sigsetsize, int p3, int p4,
|
|
|
- int p6, int p7, struct pt_regs *regs)
|
|
|
-{
|
|
|
- sigset_t saveset, newset;
|
|
|
-
|
|
|
- /* XXX: Don't preclude handling different sized sigset_t's. */
|
|
|
- if (sigsetsize != sizeof(sigset_t))
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- if (get_sigset_t(&newset, unewset))
|
|
|
- return -EFAULT;
|
|
|
- sigdelsetmask(&newset, ~_BLOCKABLE);
|
|
|
-
|
|
|
- spin_lock_irq(¤t->sighand->siglock);
|
|
|
- saveset = current->blocked;
|
|
|
- current->blocked = newset;
|
|
|
- recalc_sigpending();
|
|
|
- spin_unlock_irq(¤t->sighand->siglock);
|
|
|
-
|
|
|
- regs->result = -EINTR;
|
|
|
- regs->gpr[3] = EINTR;
|
|
|
- regs->ccr |= 0x10000000;
|
|
|
- while (1) {
|
|
|
- current->state = TASK_INTERRUPTIBLE;
|
|
|
- schedule();
|
|
|
- if (do_signal(&saveset, regs)) {
|
|
|
- set_thread_flag(TIF_RESTOREALL);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- }
|
|
|
+ current->state = TASK_INTERRUPTIBLE;
|
|
|
+ schedule();
|
|
|
+ set_thread_flag(TIF_RESTORE_SIGMASK);
|
|
|
+ return -ERESTARTNOHAND;
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_PPC32
|