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. ---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)