On Wed, Jul 31, 2024 at 06:07:32PM +0200, Frederic Weisbecker wrote: > Le Wed, Jul 24, 2024 at 04:43:13PM +0200, Valentin Schneider a écrit : > > The context_tracking.state RCU_DYNTICKS subvariable has been renamed to > > RCU_WATCHING, and the 'dynticks' prefix can be dropped without losing any > > meaning. > > > > While at it, flip the suffixes of these helpers. We are not telling > > that we are entering dynticks mode from an RCU-task perspective anymore; we > > are telling that we are exiting RCU-tasks because we are in eqs mode. > > > > Suggested-by: Frederic Weisbecker <frederic@xxxxxxxxxx> > > Signed-off-by: Valentin Schneider <vschneid@xxxxxxxxxx> > > --- > > kernel/context_tracking.c | 28 ++++++++++++++-------------- > > 1 file changed, 14 insertions(+), 14 deletions(-) > > > > diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c > > index 8262f57a43636..1c16a7336360f 100644 > > --- a/kernel/context_tracking.c > > +++ b/kernel/context_tracking.c > > @@ -38,24 +38,24 @@ EXPORT_SYMBOL_GPL(context_tracking); > > #ifdef CONFIG_CONTEXT_TRACKING_IDLE > > #define TPS(x) tracepoint_string(x) > > > > -/* Record the current task on dyntick-idle entry. */ > > -static __always_inline void rcu_dynticks_task_enter(void) > > +/* Record the current task on exiting RCU-tasks (dyntick-idle entry). */ > > +static __always_inline void rcu_task_exit(void) > > So this makes sense. > > > { > > #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) > > WRITE_ONCE(current->rcu_tasks_idle_cpu, smp_processor_id()); > > #endif /* #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) */ > > } > > > > -/* Record no current task on dyntick-idle exit. */ > > -static __always_inline void rcu_dynticks_task_exit(void) > > +/* Record no current task on entering RCU-tasks (dyntick-idle exit). */ > > +static __always_inline void rcu_task_enter(void) > > That too. > > > { > > #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) > > WRITE_ONCE(current->rcu_tasks_idle_cpu, -1); > > #endif /* #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) */ > > } > > > > -/* Turn on heavyweight RCU tasks trace readers on idle/user entry. */ > > -static __always_inline void rcu_dynticks_task_trace_enter(void) > > +/* Turn on heavyweight RCU tasks trace readers on kernel exit. */ > > +static __always_inline void rcu_task_trace_exit(void) > > But that eventually doesn't, because it's not about not wathing anymore from > an RCU-TASKS-TRACE perspective. It's actually about adding more heavyweight > ordering to track down RCU-TASKS-TRACE read side while traditional RCU is not > watching. Sorry for understanding it that late. > > Oh well. So a more accurate name here would be rcu_task_trace_heavyweight_enter(). > > > { > > #ifdef CONFIG_TASKS_TRACE_RCU > > if (IS_ENABLED(CONFIG_TASKS_TRACE_RCU_READ_MB)) > > @@ -63,8 +63,8 @@ static __always_inline void rcu_dynticks_task_trace_enter(void) > > #endif /* #ifdef CONFIG_TASKS_TRACE_RCU */ > > } > > > > -/* Turn off heavyweight RCU tasks trace readers on idle/user exit. */ > > -static __always_inline void rcu_dynticks_task_trace_exit(void) > > +/* Turn off heavyweight RCU tasks trace readers on kernel entry. */ > > +static __always_inline void rcu_task_trace_enter(void) > > And rcu_task_trace_heavyweight_exit(). > I have updated it here [1]. Please let me know if something looks incorrect. [1] https://git.kernel.org/pub/scm/linux/kernel/git/neeraj.upadhyay/linux-rcu.git/commit/?h=next.14.08.24a&id=cfc22b9f1572b137dd9f36da831dd7b69c9fe352 - Neeraj > Thanks! > > > { > > #ifdef CONFIG_TASKS_TRACE_RCU > > if (IS_ENABLED(CONFIG_TASKS_TRACE_RCU_READ_MB)) > > @@ -87,7 +87,7 @@ static noinstr void ct_kernel_exit_state(int offset) > > * critical sections, and we also must force ordering with the > > * next idle sojourn. > > */ > > - rcu_dynticks_task_trace_enter(); // Before ->dynticks update! > > + rcu_task_trace_exit(); // Before CT state update! > > seq = ct_state_inc(offset); > > // RCU is no longer watching. Better be in extended quiescent state! > > WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) && (seq & CT_RCU_WATCHING)); > > @@ -109,7 +109,7 @@ static noinstr void ct_kernel_enter_state(int offset) > > */ > > seq = ct_state_inc(offset); > > // RCU is now watching. Better not be in an extended quiescent state! > > - rcu_dynticks_task_trace_exit(); // After ->dynticks update! > > + rcu_task_trace_enter(); // After CT state update! > > WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) && !(seq & CT_RCU_WATCHING)); > > } > > > > @@ -149,7 +149,7 @@ static void noinstr ct_kernel_exit(bool user, int offset) > > // RCU is watching here ... > > ct_kernel_exit_state(offset); > > // ... but is no longer watching here. > > - rcu_dynticks_task_enter(); > > + rcu_task_exit(); > > } > > > > /* > > @@ -173,7 +173,7 @@ static void noinstr ct_kernel_enter(bool user, int offset) > > ct->nesting++; > > return; > > } > > - rcu_dynticks_task_exit(); > > + rcu_task_enter(); > > // RCU is not watching here ... > > ct_kernel_enter_state(offset); > > // ... but is watching here. > > @@ -240,7 +240,7 @@ void noinstr ct_nmi_exit(void) > > // ... but is no longer watching here. > > > > if (!in_nmi()) > > - rcu_dynticks_task_enter(); > > + rcu_task_exit(); > > } > > > > /** > > @@ -274,7 +274,7 @@ void noinstr ct_nmi_enter(void) > > if (rcu_dynticks_curr_cpu_in_eqs()) { > > > > if (!in_nmi()) > > - rcu_dynticks_task_exit(); > > + rcu_task_enter(); > > > > // RCU is not watching here ... > > ct_kernel_enter_state(CT_RCU_WATCHING); > > -- > > 2.43.0 > >