Hi, On 10/14/2022 8:15 PM, Paul E. McKenney wrote: > On Fri, Oct 14, 2022 at 12:20:19PM +0800, Hou Tao wrote: >> Hi, >> >> On 10/14/2022 3:00 AM, Paul E. McKenney wrote: >>> On Thu, Oct 13, 2022 at 09:25:31AM +0800, Hou Tao wrote: >>>> Hi, >>>> >>>> On 10/13/2022 12:11 AM, Paul E. McKenney wrote: >>>>> On Wed, Oct 12, 2022 at 05:26:26PM +0800, Hou Tao wrote: >> SNIP >>>>> How about if I produce a patch for rcu_trace_implies_rcu_gp() and let >>>>> you carry it with your series? That way I don't have an unused function >>>>> in -rcu and you don't have to wait for me to send it upstream? >>>> Sound reasonable to me. Also thanks for your suggestions. >>> Here you go! Thoughts? >> It looks great and thanks for it. > Very good! I will carry it in -rcu for some time, so please let me know > when/if you pull it into a series. Have already included the patch in v2 patch-set and send it out [0]. 0: https://lore.kernel.org/bpf/20221014113946.965131-1-houtao@xxxxxxxxxxxxxxx/T/#t > > Thanx, Paul > >>> ------------------------------------------------------------------------ >>> >>> commit 2eac2f7a9a6d8921e8084a6acdffa595e99dbd17 >>> Author: Paul E. McKenney <paulmck@xxxxxxxxxx> >>> Date: Thu Oct 13 11:54:13 2022 -0700 >>> >>> rcu-tasks: Provide rcu_trace_implies_rcu_gp() >>> >>> As an accident of implementation, an RCU Tasks Trace grace period also >>> acts as an RCU grace period. However, this could change at any time. >>> This commit therefore creates an rcu_trace_implies_rcu_gp() that currently >>> returns true to codify this accident. Code relying on this accident >>> must call this function to verify that this accident is still happening. >>> >>> Reported-by: Hou Tao <houtao@xxxxxxxxxxxxxxx> >>> Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx> >>> Cc: Alexei Starovoitov <ast@xxxxxxxxxx> >>> Cc: Martin KaFai Lau <martin.lau@xxxxxxxxx> >>> >>> diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h >>> index 08605ce7379d7..8822f06e4b40c 100644 >>> --- a/include/linux/rcupdate.h >>> +++ b/include/linux/rcupdate.h >>> @@ -240,6 +240,18 @@ static inline void exit_tasks_rcu_start(void) { } >>> static inline void exit_tasks_rcu_finish(void) { } >>> #endif /* #else #ifdef CONFIG_TASKS_RCU_GENERIC */ >>> >>> +/** >>> + * rcu_trace_implies_rcu_gp - does an RCU Tasks Trace grace period imply an RCU grace period? >>> + * >>> + * As an accident of implementation, an RCU Tasks Trace grace period also >>> + * acts as an RCU grace period. However, this could change at any time. >>> + * Code relying on this accident must call this function to verify that >>> + * this accident is still happening. >>> + * >>> + * You have been warned! >>> + */ >>> +static inline bool rcu_trace_implies_rcu_gp(void) { return true; } >>> + >>> /** >>> * cond_resched_tasks_rcu_qs - Report potential quiescent states to RCU >>> * >>> diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h >>> index b0b885e071fa8..fe9840d90e960 100644 >>> --- a/kernel/rcu/tasks.h >>> +++ b/kernel/rcu/tasks.h >>> @@ -1535,6 +1535,8 @@ static void rcu_tasks_trace_postscan(struct list_head *hop) >>> { >>> // Wait for late-stage exiting tasks to finish exiting. >>> // These might have passed the call to exit_tasks_rcu_finish(). >>> + >>> + // If you remove the following line, update rcu_trace_implies_rcu_gp()!!! >>> synchronize_rcu(); >>> // Any tasks that exit after this point will set >>> // TRC_NEED_QS_CHECKED in ->trc_reader_special.b.need_qs. > .