| Subject | Re: [PATCH v2 07/43] blackfin: Use set_current_blocked() and block_sigmask() | From | Matt Fleming <> | Date | Sat, 20 Aug 2011 09:36:43 +0100 |
| |
On Sat, 2011-08-20 at 00:00 -0400, Mike Frysinger wrote: > On Fri, Aug 19, 2011 at 12:46, Matt Fleming wrote: > > --- a/arch/blackfin/kernel/signal.c > > +++ b/arch/blackfin/kernel/signal.c > > - if (ret == 0) { > > - spin_lock_irq(¤t->sighand->siglock); > > - sigorsets(¤t->blocked, ¤t->blocked, > > - &ka->sa.sa_mask); > > - if (!(ka->sa.sa_flags & SA_NODEFER)) > > - sigaddset(¤t->blocked, sig); > > - recalc_sigpending(); > > - spin_unlock_irq(¤t->sighand->siglock); > > - } > > + if (ret == 0) > > + block_sigmask(ka, sig); > > the Blackfin version holds siglock and calls recalc_sigpending() while > block_sigmask() does neither. i'm guessing that is expected behavior > now ?
Yah, set_current_blocked() inside of block_sigmask() still grabs siglock and calls recalc_sigpending() for you. Reading current->blocked inside of block_sigmask() is fine and the sigorsets() is OK because we're modifying a stack variable, so only grabbing the lock inside of set_current_blocked() is safe.
-- Matt Fleming, Intel Open Source Technology Center
|