Hello, On Wed, Oct 19, 2022 at 6:51 PM Paul E. McKenney <paulmck@xxxxxxxxxx> wrote: > > From: Uladzislau Rezki <urezki@xxxxxxxxx> > > call_rcu() changes to save power will slow down RCU workqueue items > queued via queue_rcu_work(). This may not be an issue, however we cannot > assume that workqueue users are OK with long delays. Use > call_rcu_flush() API instead which reverts to the old behavio On ChromeOS, I can see that queue_rcu_work() is pretty noisy and the batching is much better if we can just keep it as call_rcu() instead of call_rcu_flush(). Is there really any reason to keep it as call_rcu_flush() ? If I recall, the real reason Vlad's system was slowing down was because of scsi and the queue_rcu_work() conversion was really a red herring. Vlad, any thoughts? thanks, - Joel . > > Signed-off-by: Uladzislau Rezki <urezki@xxxxxxxxx> > Signed-off-by: Joel Fernandes (Google) <joel@xxxxxxxxxxxxxxxxx> > Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx> > --- > kernel/workqueue.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/workqueue.c b/kernel/workqueue.c > index 7cd5f5e7e0a1b..b4b0e828b529e 100644 > --- a/kernel/workqueue.c > +++ b/kernel/workqueue.c > @@ -1771,7 +1771,7 @@ bool queue_rcu_work(struct workqueue_struct *wq, struct rcu_work *rwork) > > if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))) { > rwork->wq = wq; > - call_rcu(&rwork->rcu, rcu_work_rcufn); > + call_rcu_flush(&rwork->rcu, rcu_work_rcufn); > return true; > } > > -- > 2.31.1.189.g2e36527f23 >