Messages in this thread | | | Date | Tue, 18 Aug 2020 12:34:24 +0200 | From | peterz@infradea ... | Subject | Re: [RFC][PATCH 1/9] irq_work: Cleanup |
| |
On Mon, Aug 17, 2020 at 06:00:05AM -0700, Paul E. McKenney wrote: > On Mon, Aug 17, 2020 at 11:16:33AM +0200, peterz@infradead.org wrote: > > On Mon, Aug 17, 2020 at 11:03:25AM +0200, peterz@infradead.org wrote: > > > On Thu, Jul 23, 2020 at 09:14:11AM -0700, Paul E. McKenney wrote: > > > > > --- a/kernel/rcu/tree.c > > > > > +++ b/kernel/rcu/tree.c > > > > > @@ -1287,8 +1287,6 @@ static int rcu_implicit_dynticks_qs(stru > > > > > if (IS_ENABLED(CONFIG_IRQ_WORK) && > > > > > !rdp->rcu_iw_pending && rdp->rcu_iw_gp_seq != rnp->gp_seq && > > > > > (rnp->ffmask & rdp->grpmask)) { > > > > > - init_irq_work(&rdp->rcu_iw, rcu_iw_handler); > > > > > > > > We are actually better off with the IRQ_WORK_INIT_HARD() here rather > > > > than unconditionally at boot. > > > > > > Ah, but there isn't an init_irq_work() variant that does the HARD thing. > > > > Ah you meant doing: > > > > rdp->rcu_iw = IRQ_WORK_INIT_HARD(rcu_iw_handler) > > > > But then it is non-obvious how that doesn't trample state. I suppose > > that rcu_iw_pending thing ensures that... I'll think about it. > > Yes, this is what I had in mind. And you are right, the point of the > !rdp->rcu_iw_pending check is to prevent initialization while still > in use.
So I checked my notes, and the plan was to replace rcu_iw_pending with irq_work pending bit, but for that we musnt't clobber that state every time.
| |