m32r: Update sys_rt_sigsuspend
Update sys_rt_sigsuspend() of arch/m32r/signal.c. This modification is derived from generic one of kernel/signal.c. Signed-off-by: Hirokazu Takata <takata@linux-m32r.org>
This commit is contained in:
parent
52fda4870e
commit
c37a330357
|
@ -36,7 +36,7 @@ sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize,
|
||||||
unsigned long r2, unsigned long r3, unsigned long r4,
|
unsigned long r2, unsigned long r3, unsigned long r4,
|
||||||
unsigned long r5, unsigned long r6, struct pt_regs *regs)
|
unsigned long r5, unsigned long r6, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
sigset_t saveset, newset;
|
sigset_t newset;
|
||||||
|
|
||||||
/* XXX: Don't preclude handling different sized sigset_t's. */
|
/* XXX: Don't preclude handling different sized sigset_t's. */
|
||||||
if (sigsetsize != sizeof(sigset_t))
|
if (sigsetsize != sizeof(sigset_t))
|
||||||
|
@ -44,21 +44,18 @@ sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize,
|
||||||
|
|
||||||
if (copy_from_user(&newset, unewset, sizeof(newset)))
|
if (copy_from_user(&newset, unewset, sizeof(newset)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
sigdelsetmask(&newset, ~_BLOCKABLE);
|
sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP));
|
||||||
|
|
||||||
spin_lock_irq(¤t->sighand->siglock);
|
spin_lock_irq(¤t->sighand->siglock);
|
||||||
saveset = current->blocked;
|
current->saved_sigmask = current->blocked;
|
||||||
current->blocked = newset;
|
current->blocked = newset;
|
||||||
recalc_sigpending();
|
recalc_sigpending();
|
||||||
spin_unlock_irq(¤t->sighand->siglock);
|
spin_unlock_irq(¤t->sighand->siglock);
|
||||||
|
|
||||||
regs->r0 = -EINTR;
|
current->state = TASK_INTERRUPTIBLE;
|
||||||
while (1) {
|
schedule();
|
||||||
current->state = TASK_INTERRUPTIBLE;
|
set_thread_flag(TIF_RESTORE_SIGMASK);
|
||||||
schedule();
|
return -ERESTARTNOHAND;
|
||||||
if (do_signal(regs, &saveset))
|
|
||||||
return regs->r0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int
|
asmlinkage int
|
||||||
|
|
|
@ -149,16 +149,21 @@ static inline unsigned int get_thread_fault_code(void)
|
||||||
#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
|
#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
|
||||||
#define TIF_SINGLESTEP 3 /* restore singlestep on return to user mode */
|
#define TIF_SINGLESTEP 3 /* restore singlestep on return to user mode */
|
||||||
#define TIF_IRET 4 /* return with iret */
|
#define TIF_IRET 4 /* return with iret */
|
||||||
#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */
|
#define TIF_RESTORE_SIGMASK 8 /* restore signal mask in do_signal() */
|
||||||
/* 31..28 fault code */
|
#define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */
|
||||||
#define TIF_MEMDIE 17
|
#define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_RESCHED */
|
||||||
|
#define TIF_MEMDIE 18 /* OOM killer killed process */
|
||||||
|
#define TIF_FREEZE 19 /* is freezing for suspend */
|
||||||
|
|
||||||
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
|
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
|
||||||
#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
|
#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
|
||||||
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
|
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
|
||||||
#define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP)
|
#define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP)
|
||||||
#define _TIF_IRET (1<<TIF_IRET)
|
#define _TIF_IRET (1<<TIF_IRET)
|
||||||
|
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
|
||||||
|
#define _TIF_USEDFPU (1<<TIF_USEDFPU)
|
||||||
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
|
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
|
||||||
|
#define _TIF_FREEZE (1<<TIF_FREEZE)
|
||||||
|
|
||||||
#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
|
#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
|
||||||
#define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */
|
#define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */
|
||||||
|
|
Loading…
Reference in New Issue