Re: [PATCH tip/core/rcu 1/5] rcu: Fix soft lockup for rcu_nocb_kthread

From: Paul E. McKenney
Date: Mon Aug 22 2016 - 12:45:13 EST


On Mon, Aug 22, 2016 at 07:19:53PM +0300, Nikolay Borisov wrote:
>
> [SNIP]
> >
> > Signed-off-by: Ding Tianhong <dingtianhong@xxxxxxxxxx>
> > [ paulmck: Substituted cond_resched_rcu_qs for cond_resched. ]
>
> This contradicts...
>
> > Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx>
> > ---
> > kernel/rcu/tree_plugin.h | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
> > index 0082fce402a0..85c5a883c6e3 100644
> > --- a/kernel/rcu/tree_plugin.h
> > +++ b/kernel/rcu/tree_plugin.h
> > @@ -2173,6 +2173,7 @@ static int rcu_nocb_kthread(void *arg)
> > cl++;
> > c++;
> > local_bh_enable();
> > + cond_resched_rcu_qs();
>
> with what's here?

Ding Tianhong's original patch:

http://www.mail-archive.com/linux-kernel@xxxxxxxxxxxxxxx/msg1167918.html

had cond_resched() here, which works for his workload, but can result
in stall warnings in other cases. I therfore changed his cond_resched()
to the cond_resched_rcu_qs() that you see above, and documented this
change in the "paulmck" note after Ding Tianhong's Signed-off-by.

So all is as it should be.

Thanx, Paul

> > list = next;
> > }
> > trace_rcu_batch_end(rdp->rsp->name, c, !!list, 0, 0, 1);
> >
>