Message ID | 20221122010421.3799681-13-paulmck@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,01/16] rcu: Simplify rcu_init_nohz() cpumask handling | expand |
On Mon, Nov 21, 2022 at 05:04:18PM -0800, Paul E. McKenney wrote: > And another call_rcu() instance that cannot be lazy is the one > in queue_rcu_work(), given that callers to queue_rcu_work() are > not necessarily OK with long delays. So, this is fine but another thing we can do is propagating the distinction through the workqueue interface so that the the choice can be made by workqueue users. Would that make sense? Thanks.
On Mon, Nov 21, 2022 at 03:09:29PM -1000, Tejun Heo wrote: > On Mon, Nov 21, 2022 at 05:04:18PM -0800, Paul E. McKenney wrote: > > And another call_rcu() instance that cannot be lazy is the one > > in queue_rcu_work(), given that callers to queue_rcu_work() are > > not necessarily OK with long delays. > > So, this is fine but another thing we can do is propagating the distinction > through the workqueue interface so that the the choice can be made by > workqueue users. Would that make sense? It might well! My thought was to wait to suggest that until we found a real-life case where this was needed, but I have no objection to being proactive here. But the hard part... Thought for a good name? ;-) Thanx, Paul
On Mon, Nov 21, 2022 at 05:23:57PM -0800, Paul E. McKenney wrote: > On Mon, Nov 21, 2022 at 03:09:29PM -1000, Tejun Heo wrote: > > On Mon, Nov 21, 2022 at 05:04:18PM -0800, Paul E. McKenney wrote: > > > And another call_rcu() instance that cannot be lazy is the one > > > in queue_rcu_work(), given that callers to queue_rcu_work() are > > > not necessarily OK with long delays. > > > > So, this is fine but another thing we can do is propagating the distinction > > through the workqueue interface so that the the choice can be made by > > workqueue users. Would that make sense? > > It might well! My thought was to wait to suggest that until we found a > real-life case where this was needed, but I have no objection to being > proactive here. Oh yeah, I'm completely fine either way too. > But the hard part... Thought for a good name? ;-) If we go with a separate interface, yeah, _flush would be confusing for workqueue. Maybe _quick or _hurry? Hmm... it'd be nice to keep the suffix consistent with RCU. What's the relationship with synchronize_rcu_expedited()? Would using _expedited be confusing? Thanks.
On Mon, Nov 21, 2022 at 03:37:56PM -1000, Tejun Heo wrote: > On Mon, Nov 21, 2022 at 05:23:57PM -0800, Paul E. McKenney wrote: > > On Mon, Nov 21, 2022 at 03:09:29PM -1000, Tejun Heo wrote: > > > On Mon, Nov 21, 2022 at 05:04:18PM -0800, Paul E. McKenney wrote: > > > > And another call_rcu() instance that cannot be lazy is the one > > > > in queue_rcu_work(), given that callers to queue_rcu_work() are > > > > not necessarily OK with long delays. > > > > > > So, this is fine but another thing we can do is propagating the distinction > > > through the workqueue interface so that the the choice can be made by > > > workqueue users. Would that make sense? > > > > It might well! My thought was to wait to suggest that until we found a > > real-life case where this was needed, but I have no objection to being > > proactive here. > > Oh yeah, I'm completely fine either way too. > > > But the hard part... Thought for a good name? ;-) > > If we go with a separate interface, yeah, _flush would be confusing for > workqueue. Maybe _quick or _hurry? Hmm... it'd be nice to keep the suffix > consistent with RCU. What's the relationship with > synchronize_rcu_expedited()? Would using _expedited be confusing? I expect that _expedited() would be because this has nothing whatever to do with expedited grace periods. Maybe we should have used call_rcu_hurry()? What is in a name? ;-) Thanx, Paul
On Mon, Nov 21, 2022 at 05:52:02PM -0800, Paul E. McKenney wrote:
> Maybe we should have used call_rcu_hurry()?
That sounds good to me.
Thanks.
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; }