On Mon, Mar 08, 2021 at 11:07:01AM +0100, Martin Pieuchot wrote:
> On 04/03/21(Thu) 10:44, Martin Pieuchot wrote:
> > single_thread_clear() manipulates the same data structures as
> > single_thread_set() and, as such, doesn't need the KERNEL_LOCK().
> > 
> > However cursig() does need some sort of serialization to ensure that
> > per-process data structures like signals, flags and traced-signum stay
> > consistent.  So the diff below move the assertion up in preparation for
> > more mp work.
> > 
> > ok?
> 
> Anyone?

OK claudio
 
> > Index: kern/kern_sig.c
> > ===================================================================
> > RCS file: /cvs/src/sys/kern/kern_sig.c,v
> > retrieving revision 1.274
> > diff -u -p -r1.274 kern_sig.c
> > --- kern/kern_sig.c 4 Mar 2021 09:02:37 -0000       1.274
> > +++ kern/kern_sig.c 4 Mar 2021 09:35:47 -0000
> > @@ -1182,6 +1182,8 @@ cursig(struct proc *p)
> >     int dolock = (p->p_flag & P_SINTR) == 0;
> >     int s;
> >  
> > +   KERNEL_ASSERT_LOCKED();
> > +
> >     sigpending = (p->p_siglist | pr->ps_siglist);
> >     if (sigpending == 0)
> >             return 0;
> > @@ -1225,11 +1227,7 @@ cursig(struct proc *p)
> >                     if (dolock)
> >                             SCHED_UNLOCK(s);
> >  
> > -                   if (dolock)
> > -                           KERNEL_LOCK();
> >                     single_thread_clear(p, 0);
> > -                   if (dolock)
> > -                           KERNEL_UNLOCK();
> >  
> >                     /*
> >                      * If we are no longer being traced, or the parent
> > @@ -2128,7 +2126,6 @@ single_thread_clear(struct proc *p, int 
> >  
> >     KASSERT(pr->ps_single == p);
> >     KASSERT(curproc == p);
> > -   KERNEL_ASSERT_LOCKED();
> >  
> >     SCHED_LOCK(s);
> >     pr->ps_single = NULL;
> > 
> 

-- 
:wq Claudio

Reply via email to