On Wed, Jul 23, 2025 at 01:50:35PM -0700, Boqun Feng wrote: > On Wed, Jul 23, 2025 at 01:27:56PM -0700, Paul E. McKenney wrote: > > This commit adds no-trace variants of the srcu_read_lock_fast() and > > srcu_read_unlock_fast() functions for tracing use. > > > > [ paulmck: Apply notrace feedback from Joel Fernandes, Steven Rostedt, and Mathieu Desnoyers. ] > > > > Link: https://lore.kernel.org/all/20250721162433.10454-1-paulmck@xxxxxxxxxx > > Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx> > > Reviewed-by: Joel Fernandes <joelagnelf@xxxxxxxxxx> > > Cc: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx> > > Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> > > Cc: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > > Cc: <bpf@xxxxxxxxxxxxxxx> > > --- > > include/linux/srcu.h | 30 ++++++++++++++++++++++++++++-- > > include/linux/srcutree.h | 5 +++-- > > 2 files changed, 31 insertions(+), 4 deletions(-) > > > > diff --git a/include/linux/srcu.h b/include/linux/srcu.h > > index 478c73d067f7d..ec3b8e27d6c5a 100644 > > --- a/include/linux/srcu.h > > +++ b/include/linux/srcu.h > > @@ -271,7 +271,7 @@ static inline int srcu_read_lock(struct srcu_struct *ssp) __acquires(ssp) > > * where RCU is watching, that is, from contexts where it would be legal > > * to invoke rcu_read_lock(). Otherwise, lockdep will complain. > > */ > > -static inline struct srcu_ctr __percpu *srcu_read_lock_fast(struct srcu_struct *ssp) __acquires(ssp) > > +static inline struct srcu_ctr __percpu notrace *srcu_read_lock_fast(struct srcu_struct *ssp) __acquires(ssp) > > Hmm.. am I missing something, why do we need ot make > srcu_read_lock_fast() notrace? I thought we only need those _notrace() > variants notrace? Good point! It looks like I got a bit too exuberant here. I am removing notrace from srcu_read_lock_fast() and srcu_read_unlock_fast(), but leaving srcu_read_lock_fast_notrace(), srcu_read_unlock_fast_notrace(), __srcu_read_lock_fast(), and __srcu_read_unlock_fast() as-is. Thanx, Paul > Regards, > Boqun > > > { > > struct srcu_ctr __percpu *retval; > > > > @@ -282,6 +282,20 @@ static inline struct srcu_ctr __percpu *srcu_read_lock_fast(struct srcu_struct * > > return retval; > > } > > > > +/* > > + * Used by tracing, cannot be traced and cannot call lockdep. > > + * See srcu_read_lock_fast() for more information. > > + */ > > +static inline struct srcu_ctr __percpu *srcu_read_lock_fast_notrace(struct srcu_struct *ssp) > > + __acquires(ssp) > > +{ > > + struct srcu_ctr __percpu *retval; > > + > > + srcu_check_read_flavor_force(ssp, SRCU_READ_FLAVOR_FAST); > > + retval = __srcu_read_lock_fast(ssp); > > + return retval; > > +} > > + > > /** > > * srcu_down_read_fast - register a new reader for an SRCU-protected structure. > > * @ssp: srcu_struct in which to register the new reader. > > @@ -385,7 +399,8 @@ static inline void srcu_read_unlock(struct srcu_struct *ssp, int idx) > > * > > * Exit a light-weight SRCU read-side critical section. > > */ > > -static inline void srcu_read_unlock_fast(struct srcu_struct *ssp, struct srcu_ctr __percpu *scp) > > +static inline void notrace > > +srcu_read_unlock_fast(struct srcu_struct *ssp, struct srcu_ctr __percpu *scp) > > __releases(ssp) > > { > > srcu_check_read_flavor(ssp, SRCU_READ_FLAVOR_FAST); > > @@ -394,6 +409,17 @@ static inline void srcu_read_unlock_fast(struct srcu_struct *ssp, struct srcu_ct > > RCU_LOCKDEP_WARN(!rcu_is_watching(), "RCU must be watching srcu_read_unlock_fast()."); > > } > > > > +/* > > + * Used by tracing, cannot be traced and cannot call lockdep. > > + * See srcu_read_unlock_fast() for more information. > > + */ > > +static inline void srcu_read_unlock_fast_notrace(struct srcu_struct *ssp, > > + struct srcu_ctr __percpu *scp) __releases(ssp) > > +{ > > + srcu_check_read_flavor(ssp, SRCU_READ_FLAVOR_FAST); > > + __srcu_read_unlock_fast(ssp, scp); > > +} > > + > > /** > > * srcu_up_read_fast - unregister a old reader from an SRCU-protected structure. > > * @ssp: srcu_struct in which to unregister the old reader. > > diff --git a/include/linux/srcutree.h b/include/linux/srcutree.h > > index 043b5a67ef71e..4d2fee4d38289 100644 > > --- a/include/linux/srcutree.h > > +++ b/include/linux/srcutree.h > > @@ -240,7 +240,7 @@ static inline struct srcu_ctr __percpu *__srcu_ctr_to_ptr(struct srcu_struct *ss > > * on architectures that support NMIs but do not supply NMI-safe > > * implementations of this_cpu_inc(). > > */ > > -static inline struct srcu_ctr __percpu *__srcu_read_lock_fast(struct srcu_struct *ssp) > > +static inline struct srcu_ctr __percpu notrace *__srcu_read_lock_fast(struct srcu_struct *ssp) > > { > > struct srcu_ctr __percpu *scp = READ_ONCE(ssp->srcu_ctrp); > > > > @@ -267,7 +267,8 @@ static inline struct srcu_ctr __percpu *__srcu_read_lock_fast(struct srcu_struct > > * on architectures that support NMIs but do not supply NMI-safe > > * implementations of this_cpu_inc(). > > */ > > -static inline void __srcu_read_unlock_fast(struct srcu_struct *ssp, struct srcu_ctr __percpu *scp) > > +static inline void notrace > > +__srcu_read_unlock_fast(struct srcu_struct *ssp, struct srcu_ctr __percpu *scp) > > { > > barrier(); /* Avoid leaking the critical section. */ > > if (!IS_ENABLED(CONFIG_NEED_SRCU_NMI_SAFE)) > > -- > > 2.40.1 > > > >