Re: [PATCH 11/11] rcu/nocb: Don't invoke local rcu core on callback overload from nocb kthread

From: Frederic Weisbecker
Date: Mon Oct 11 2021 - 08:11:27 EST


Phew, the last changelog is the most careless...

On Thu, Sep 30, 2021 at 05:37:37PM +0200, Sebastian Andrzej Siewior wrote:
> On 2021-09-30 00:10:12 [+0200], Frederic Weisbecker wrote:
> > rcu_core() tries to ensure that its self-invocation in case of callbacks
> > overload only happen in softirq/rcuc mode. Indeed it doesn't make sense
> > to trigger local RCU core from nocb_cb kthread since it can execute
> > on a CPU different from the target rdp. Also in case of overload, the
> > nocb_cb kthread simply iterates a new loop of callbacks processing.
> >
> > However the "offloaded" check that aims at preventing that is wrong.
> - that?

Rephrasing the changelog:

"However the "offloaded" check that aims at preventing misplaced
rcu_core() invocations is wrong."


>
> > First of all that state is volatile and second: softirq/rcuc can
> > execute while the target rdp is offloaded. As a result rcu_core() can
>
> can what?

"As a result rcu_core() can be invoked on the wrong CPU while in the
process of (de-offloading)."

Thanks!


>
> > Fix that with moving the rcu_core() self-invocation to rcu_core() itself,
> > irrespective of the rdp offloaded state.
>
> Sebastian