On 15/04/24 23:08, Frederic Weisbecker wrote: > Le Mon, Apr 15, 2024 at 06:36:31PM +0200, Valentin Schneider a écrit : >> >> Sounds good to me too, thanks for the suggestion :) >> >> Now, what about ct_dynticks() & friends? I was about to do: >> >> -static __always_inline int ct_dynticks(void) >> +static __always_inline int ct_rcu_watching(void) >> { >> - return atomic_read(this_cpu_ptr(&context_tracking.state)) & CT_DYNTICKS_MASK; >> + return atomic_read(this_cpu_ptr(&context_tracking.state)) & CT_RCU_WATCHING_MASK; >> } > > Yup! > >> >> ... but then realised that there's more siblings to the rcu_dynticks*() >> family; > > Ouch right, sorry I forgot there is so much of this namespace. But in case you're > willing to clean that up: > While I'm at it, I figure I might as well. >> >> AFAICT dynticks_nesting could also get the rcu_watching prefix treatment, >> `rcu_dynticks_task_exit() -> rcu_watching_task_exit` doesn't sound as > > rcu_tasks_exit() ? > > But Paul, is there a reason why check_holdout_task() doesn't check > ct_dynticks_cpu(task_cpu(t)) instead of maintaining this separate counter? > >> obvious though. The rcu_dyntick event probably can't be renamed either. > > I think we can rename trace_rcu_dyntick() to trace_rcu_watching() > >> >> I'm not sure how far to take the renaming; seeing things like: >> >> notrace bool rcu_is_watching(void) >> { >> bool ret; >> >> preempt_disable_notrace(); >> ret = !rcu_dynticks_curr_cpu_in_eqs(); >> preempt_enable_notrace(); >> return ret; >> } >> EXPORT_SYMBOL_GPL(rcu_is_watching); >> >> makes me think most of the rcu_*dynticks / rcu_*eqs stuff could get an >> rcu_watching facelift? > > The eqs part can stay as-is. But the *dynticks* needs an update. > >> >> Here are my current considerations for identifiers used in context_tracking >> in decreasing order of confidence: >> >> | Old | New | >> |---------------------------------------+---------------------------------------------------------------| >> | RCU_DYNTICKS_IDX | CT_RCU_WATCHING | >> | RCU_DYNTICKS_MASK | CT_RCU_WATCHING_MASK | >> | context_tracking.dynticks_nesting | context_tracking.rcu_watching_nesting | > > This can be context_tracking.nesting (and yes one day we might need to lock up > context_tracking.nesting and context_tracking.recursion together in a room and see > who wins after a day or two). > Much better! >> | context_tracking.dynticks_nmi_nesting | context_tracking.rcu_watching_nmi_nesting [bit of a mouthful] | > > context_tracking.nmi_nesting > >> | rcu_dynticks_curr_cpu_in_eqs() | rcu_watching_curr_cpu() [with an added negation] | > > Nice! > >> |---------------------------------------+---------------------------------------------------------------| >> | TRACE_EVENT_RCU(rcu_dyntick, | [Can't change?] | > > It can change. Officially trace events aren't ABI. Unoficially I wouldn't dare > changing the sched switch trace event but this one is fine. > Cool, away it goes then :) >> |---------------------------------------+---------------------------------------------------------------| >> | rcu_dynticks_task_enter() | rcu_watching_task_enter()> | | > > rcu_tasks_enter() ? > >> | rcu_dynticks_task_exit() | rcu_watching_task_exit() | > > rcu_tasks_exit() ? > >> | rcu_dynticks_task_trace_enter() | rcu_watching_task_trace_enter() | > > rcu_tasks_trace_enter()? > >> | rcu_dynticks_task_trace_exit() | rcu_watching_task_trace_exit() | > > rcu_tasks_trace_exit() ? > Now that you point it out, it looks obvious! > Thanks. > >> >> Thoughts? >>