Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 297823
b: refs/heads/master
c: 5e047fa
h: refs/heads/master
i:
  297821: 877d3f6
  297819: 39a1a82
  297815: 534d41d
  297807: 9d28db2
  297791: 9d437c0
v: v3
  • Loading branch information
Matt Fleming authored and Paul Mundt committed Mar 29, 2012
1 parent 3aa1c76 commit bd60088
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 50 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8368b0e0ca5f38f605066fa0c9ea33bbc191e267
refs/heads/master: 5e047fa159cf40733c627002d0443fddff3183c7
32 changes: 10 additions & 22 deletions trunk/arch/sh/kernel/signal_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,13 @@ sys_sigsuspend(old_sigset_t mask,
unsigned long r5, unsigned long r6, unsigned long r7,
struct pt_regs __regs)
{
mask &= _BLOCKABLE;
spin_lock_irq(&current->sighand->siglock);
sigset_t blocked;

current->saved_sigmask = current->blocked;
siginitset(&current->blocked, mask);
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);

mask &= _BLOCKABLE;
siginitset(&blocked, mask);
set_current_blocked(&blocked);

current->state = TASK_INTERRUPTIBLE;
schedule();
Expand Down Expand Up @@ -240,11 +241,7 @@ asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5,
goto badframe;

sigdelsetmask(&set, ~_BLOCKABLE);

spin_lock_irq(&current->sighand->siglock);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
set_current_blocked(&set);

if (restore_sigcontext(regs, &frame->sc, &r0))
goto badframe;
Expand Down Expand Up @@ -274,10 +271,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5,
goto badframe;

sigdelsetmask(&set, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
set_current_blocked(&set);

if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0))
goto badframe;
Expand Down Expand Up @@ -548,14 +542,8 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
else
ret = setup_frame(sig, ka, oldset, regs);

if (ret == 0) {
spin_lock_irq(&current->sighand->siglock);
sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
if (!(ka->sa.sa_flags & SA_NODEFER))
sigaddset(&current->blocked,sig);
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
}
if (ret == 0)
block_sigmask(ka, sig);

return ret;
}
Expand Down
37 changes: 10 additions & 27 deletions trunk/arch/sh/kernel/signal_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,14 +159,13 @@ sys_sigsuspend(old_sigset_t mask,
unsigned long r6, unsigned long r7,
struct pt_regs * regs)
{
sigset_t saveset;
sigset_t saveset, blocked;

mask &= _BLOCKABLE;
spin_lock_irq(&current->sighand->siglock);
saveset = current->blocked;
siginitset(&current->blocked, mask);
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);

mask &= _BLOCKABLE;
siginitset(&blocked, mask);
set_current_blocked(&blocked);

REF_REG_RET = -EINTR;
while (1) {
Expand Down Expand Up @@ -198,11 +197,8 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize,
if (copy_from_user(&newset, unewset, sizeof(newset)))
return -EFAULT;
sigdelsetmask(&newset, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock);
saveset = current->blocked;
current->blocked = newset;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
set_current_blocked(&newset);

REF_REG_RET = -EINTR;
while (1) {
Expand Down Expand Up @@ -408,11 +404,7 @@ asmlinkage int sys_sigreturn(unsigned long r2, unsigned long r3,
goto badframe;

sigdelsetmask(&set, ~_BLOCKABLE);

spin_lock_irq(&current->sighand->siglock);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
set_current_blocked(&set);

if (restore_sigcontext(regs, &frame->sc, &ret))
goto badframe;
Expand Down Expand Up @@ -445,10 +437,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,
goto badframe;

sigdelsetmask(&set, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
set_current_blocked(&set);

if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ret))
goto badframe;
Expand Down Expand Up @@ -734,14 +723,8 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
else
ret = setup_frame(sig, ka, oldset, regs);

if (ret == 0) {
spin_lock_irq(&current->sighand->siglock);
sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
if (!(ka->sa.sa_flags & SA_NODEFER))
sigaddset(&current->blocked,sig);
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
}
if (ret == 0)
block_sigmask(ka, sig);

return ret;
}
Expand Down

0 comments on commit bd60088

Please sign in to comment.