On Wed, Mar 11, 2026 at 04:07:14PM -0400, Steven Rostedt wrote:
> On Wed, 11 Mar 2026 20:53:10 +0100
> Peter Zijlstra <[email protected]> wrote:
> 
> > > Which basically is just __do_trace_<event>(), but as a wrapper that can
> > > handle updates that may be needed, but supplies a proper API where thing
> > > wont randomly break when __do_trace_<event>() changes.  
> > 
> > That's like a 3 line patch, hardly worth the effort. Its not like it'll
> > be hard to find and fix any users if you do ever change that.
> 
> No, but I prefer clean code, and not hacks that use internal functions with
> underscores in their names. Not to mention, it properly handles different
> cases:
> 
> diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
> index 22ca1c8b54f3..07219316a8e1 100644
> --- a/include/linux/tracepoint.h
> +++ b/include/linux/tracepoint.h
> @@ -294,6 +294,10 @@ static inline struct tracepoint 
> *tracepoint_ptr_deref(tracepoint_ptr_t *p)
>                       WARN_ONCE(!rcu_is_watching(),                   \
>                                 "RCU not watching for tracepoint");   \
>               }                                                       \
> +     }                                                               \
> +     static inline void trace_invoke_##name(proto)                   \
> +     {                                                               \
> +             __do_trace_##name(args);                                \
>       }
>  
>  #define __DECLARE_TRACE_SYSCALL(name, proto, args, data_proto)               
> \
> @@ -313,6 +317,11 @@ static inline struct tracepoint 
> *tracepoint_ptr_deref(tracepoint_ptr_t *p)
>                       WARN_ONCE(!rcu_is_watching(),                   \
>                                 "RCU not watching for tracepoint");   \
>               }                                                       \
> +     }                                                               \
> +     static inline void trace_invoke_##name(proto)                   \
> +     {                                                               \
> +             might_fault();                                          \
> +             __do_trace_##name(args);                                \
>       }
> 
> 
> Then it goes through and updates every location that has a:
> 
>       if (trace_<event>_enabled()) {
>               [..]
>               trace_<event>();
>       }

We have Cocinelle for that :-), and while I absolutely suck at writing
Cocinelle, I had some limited success using Gemini to write some for me
the other day.

Reply via email to