[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5/5] xen: RCU: avoid busy waiting until the end of grace period.
On Wed, 2017-08-09 at 19:34 +0200, Dario Faggioli wrote: > On Mon, 2017-08-07 at 02:54 -0600, Jan Beulich wrote: > > > > > Dario Faggioli <dario.faggioli@xxxxxxxxxx> 07/27/17 10:01 AM > > > +/* > > > + * Timer for making sure the CPU where a callback is queued does > > > + * periodically poke rcu_pedning(), so that it will invoke the > > > callback > > > + * not too late after the end of the grace period. > > > + */ > > > +void rcu_idle_timer_start() > > > +{ > > > + struct rcu_data *rdp = &this_cpu(rcu_data); > > > + > > > + if (likely(!rdp->curlist)) > > > + return; > > > > I would have expected this to be the inverse of the original > > condition in > > rcu_needs_cpu() - why is there no rcu_pending() invocation here? > > > > [...] > > Actually, it's entirely possible that it is having rcu_pending(cpu) > in > rcu_needs_cpu() is, for us, redundant. In fact, although it does make > sense in Linux, both code inspection and some investigation I've just > done, makes me believe that there won't be cases where a CPU is > denied > going offline because it sees rcu_pending() returning 1. > > In fact, when we call rcu_pending(), within cpu_is_haltable(), we > have > already gone through it before. And if there were pending work, we've > raised the softirq and dealt with it. If there weren't, neither there > is now. > > I'm therefore leaning toward removing rcu_pending() from the > rcu_needs_cpu() check as well. At that point, we'll indeed have the > check inside rcu_start_idle_timer(), be the opposite of the original > check in rcu_needs_cpu(). :-) > FTR, I'm not so sure of this last thing any longer. I mean, the analysis I provided is still correct, but I'm investigating the other possible race existing in the code that Tim has hinted at in his mail, and I think it could be useful to have rcu_pending() checked in here, to solve/avoid that one. It's also possible that I'll actually remove it from rcu_needs_cpu(), but to move it somewhere else... As I said, I'm still looking into the problem. Regards, Dario -- <<This happens because I choose it to happen!>> (Raistlin Majere) ----------------------------------------------------------------- Dario Faggioli, Ph.D, http://about.me/dario.faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |