On Fri, Jul 15, 2022 at 03:18:04PM +0000, Joel Fernandes wrote: > On Thu, Jul 14, 2022 at 03:21:31PM -0700, Paul E. McKenney wrote: > > On Thu, Jul 14, 2022 at 01:51:54PM -0700, Paul E. McKenney wrote: > > > On Wed, Jul 13, 2022 at 09:32:32PM +0000, Joel Fernandes (Google) wrote: > > > > Hello! > > > > > > > > Please find the next improved version of call_rcu_lazy() attached. The main > > > > difference between the previous versions is that: > > > > - In v2 rcu_barrier is fixed to not hang (I found this to be due to a missing > > > > GP thread wakeup), now I am limiting this wake up only to rcu_barrier() as > > > > requested by Paul. > > > > - Fixed checkpatch and build robot issues. > > > > - Some more changes to 'lazy' parameter passing and consolidation of segcblist > > > > functions. > > > > - more testing via rcutorture and rcuscale. > > > > > > Thank you! What I am going to do is to pull these into an experimental > > > not-for-mainline branch and run the usual set of rcutorture tests. > > > I will then take a look at the patches. > > > > And there were a few conflicts with the nocb patch series in -rcu. > > The allegedly conflict-resolved series is here: joel.2022.07.14a > > Please let me know if I messed something up. > > Thanks, it looks Ok. There is one robot fix for hexagon's arch where I think > TREE_RCU is disabled, could you apply the diff below to patch 1/5 ? > > Or, I can also just keep it in my version of 1/5 to go out with the next rev. Given that I am not testing on hexagon, I will let you fix this one on the next rev. If someone out there is testing this branch on hexagon, they should feel free to apply your patch locally. ;-) Thanx, Paul > ---8<----------------------- > > diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h > index c358387fd223..aa3243e49506 100644 > --- a/kernel/rcu/rcu.h > +++ b/kernel/rcu/rcu.h > @@ -464,6 +464,14 @@ enum rcutorture_type { > INVALID_RCU_FLAVOR > }; > > +#if defined(CONFIG_RCU_LAZY) > +unsigned long rcu_lazy_get_jiffies_till_flush(void); > +void rcu_lazy_set_jiffies_till_flush(unsigned long j); > +#else > +static inline unsigned long rcu_lazy_get_jiffies_till_flush(void) { return 0; } > +static inline void rcu_lazy_set_jiffies_till_flush(unsigned long j) { } > +#endif > + > #if defined(CONFIG_TREE_RCU) > void rcutorture_get_gp_data(enum rcutorture_type test_type, int *flags, > unsigned long *gp_seq); > @@ -475,14 +483,6 @@ void do_trace_rcu_torture_read(const char *rcutorturename, > void rcu_gp_set_torture_wait(int duration); > void rcu_force_call_rcu_to_lazy(bool force); > > -#if defined(CONFIG_RCU_LAZY) > -unsigned long rcu_lazy_get_jiffies_till_flush(void); > -void rcu_lazy_set_jiffies_till_flush(unsigned long j); > -#else > -static inline unsigned long rcu_lazy_get_jiffies_till_flush(void) { return 0; } > -static inline void rcu_lazy_set_jiffies_till_flush(unsigned long j) { } > -#endif > - > #else > static inline void rcutorture_get_gp_data(enum rcutorture_type test_type, > int *flags, unsigned long *gp_seq)