Commit c37a33035720a0faf1f609dc7c2c07080ed83629

Authored by Hirokazu Takata
1 parent 52fda4870e

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>

Showing 2 changed files with 15 additions and 13 deletions Side-by-side Diff

arch/m32r/kernel/signal.c
... ... @@ -36,7 +36,7 @@
36 36 unsigned long r2, unsigned long r3, unsigned long r4,
37 37 unsigned long r5, unsigned long r6, struct pt_regs *regs)
38 38 {
39   - sigset_t saveset, newset;
  39 + sigset_t newset;
40 40  
41 41 /* XXX: Don't preclude handling different sized sigset_t's. */
42 42 if (sigsetsize != sizeof(sigset_t))
43 43  
44 44  
... ... @@ -44,21 +44,18 @@
44 44  
45 45 if (copy_from_user(&newset, unewset, sizeof(newset)))
46 46 return -EFAULT;
47   - sigdelsetmask(&newset, ~_BLOCKABLE);
  47 + sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP));
48 48  
49 49 spin_lock_irq(&current->sighand->siglock);
50   - saveset = current->blocked;
  50 + current->saved_sigmask = current->blocked;
51 51 current->blocked = newset;
52 52 recalc_sigpending();
53 53 spin_unlock_irq(&current->sighand->siglock);
54 54  
55   - regs->r0 = -EINTR;
56   - while (1) {
57   - current->state = TASK_INTERRUPTIBLE;
58   - schedule();
59   - if (do_signal(regs, &saveset))
60   - return regs->r0;
61   - }
  55 + current->state = TASK_INTERRUPTIBLE;
  56 + schedule();
  57 + set_thread_flag(TIF_RESTORE_SIGMASK);
  58 + return -ERESTARTNOHAND;
62 59 }
63 60  
64 61 asmlinkage int
include/asm-m32r/thread_info.h
... ... @@ -149,16 +149,21 @@
149 149 #define TIF_NEED_RESCHED 2 /* rescheduling necessary */
150 150 #define TIF_SINGLESTEP 3 /* restore singlestep on return to user mode */
151 151 #define TIF_IRET 4 /* return with iret */
152   -#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */
153   - /* 31..28 fault code */
154   -#define TIF_MEMDIE 17
  152 +#define TIF_RESTORE_SIGMASK 8 /* restore signal mask in do_signal() */
  153 +#define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */
  154 +#define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_RESCHED */
  155 +#define TIF_MEMDIE 18 /* OOM killer killed process */
  156 +#define TIF_FREEZE 19 /* is freezing for suspend */
155 157  
156 158 #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
157 159 #define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
158 160 #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
159 161 #define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP)
160 162 #define _TIF_IRET (1<<TIF_IRET)
  163 +#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
  164 +#define _TIF_USEDFPU (1<<TIF_USEDFPU)
161 165 #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
  166 +#define _TIF_FREEZE (1<<TIF_FREEZE)
162 167  
163 168 #define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
164 169 #define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */