On Fri, Apr 18, 2025 at 11:01:04AM -0400, Steven Rostedt wrote: > From: Steven Rostedt <rostedt@xxxxxxxxxxx> > > Most tracepoints in the kernel are created with TRACE_EVENT(). The > TRACE_EVENT() macro (and DECLARE_EVENT_CLASS() and DEFINE_EVENT() where in > reality, TRACE_EVENT() is just a helper macro that calls those other two > macros), will create not only a tracepoint (the function trace_<event>() > used in the kernel), it also exposes the tracepoint to user space along > with defining what fields will be saved by that tracepoint. > > There are a few places that tracepoints are created in the kernel that are > not exposed to userspace via tracefs. They can only be accessed from code > within the kernel. These tracepoints are created with DEFINE_TRACE() > > Most of these tracepoints end with "_tp". This is useful as when the > developer sees that, they know that the tracepoint is for in-kernel only > and is not exposed to user space. > > Instead of making this only a process to add "_tp", enforce it by making > the DECLARE_TRACE() append the "_tp" suffix to the tracepoint. This > requires adding DECLARE_TRACE_EVENT() macros for the TRACE_EVENT() macro > to use that keeps the original name. > > Link: https://lore.kernel.org/all/20250418083351.20a60e64@xxxxxxxxxxxxxxxxxx/ > > Signed-off-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> > --- > include/linux/tracepoint.h | 38 ++++++++++++++++++++++++------------ > include/trace/bpf_probe.h | 4 ++-- > include/trace/define_trace.h | 17 +++++++++++++++- > include/trace/events/sched.h | 30 ++++++++++++++-------------- > include/trace/events/tcp.h | 2 +- > 5 files changed, 60 insertions(+), 31 deletions(-) > > diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h > index a351763e6965..826ce3f8e1f8 100644 > --- a/include/linux/tracepoint.h > +++ b/include/linux/tracepoint.h > @@ -464,16 +464,30 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p) > #endif > > #define DECLARE_TRACE(name, proto, args) \ > - __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \ > + __DECLARE_TRACE(name##_tp, PARAMS(proto), PARAMS(args), \ > cpu_online(raw_smp_processor_id()), \ > PARAMS(void *__data, proto)) > > #define DECLARE_TRACE_CONDITION(name, proto, args, cond) \ > - __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \ > + __DECLARE_TRACE(name##_tp, PARAMS(proto), PARAMS(args), \ > cpu_online(raw_smp_processor_id()) && (PARAMS(cond)), \ > PARAMS(void *__data, proto)) > > #define DECLARE_TRACE_SYSCALL(name, proto, args) \ > + __DECLARE_TRACE_SYSCALL(name##_tp, PARAMS(proto), PARAMS(args), \ > + PARAMS(void *__data, proto)) > + > +#define DECLARE_TRACE_EVENT(name, proto, args) \ > + __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \ > + cpu_online(raw_smp_processor_id()), \ > + PARAMS(void *__data, proto)) > + > +#define DECLARE_TRACE_EVENT_CONDITION(name, proto, args, cond) \ > + __DECLARE_TRACE(name, PARAMS(proto), PARAMS(args), \ > + cpu_online(raw_smp_processor_id()) && (PARAMS(cond)), \ > + PARAMS(void *__data, proto)) > + > +#define DECLARE_TRACE_EVENT_SYSCALL(name, proto, args) \ > __DECLARE_TRACE_SYSCALL(name, PARAMS(proto), PARAMS(args), \ > PARAMS(void *__data, proto)) > > @@ -591,32 +605,32 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p) > > #define DECLARE_EVENT_CLASS(name, proto, args, tstruct, assign, print) > #define DEFINE_EVENT(template, name, proto, args) \ > - DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) > + DECLARE_TRACE_EVENT(name, PARAMS(proto), PARAMS(args)) > #define DEFINE_EVENT_FN(template, name, proto, args, reg, unreg)\ > - DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) > + DECLARE_TRACE_EVENT(name, PARAMS(proto), PARAMS(args)) > #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \ > - DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) > + DECLARE_TRACE_EVENT(name, PARAMS(proto), PARAMS(args)) > #define DEFINE_EVENT_CONDITION(template, name, proto, \ > args, cond) \ > - DECLARE_TRACE_CONDITION(name, PARAMS(proto), \ > + DECLARE_TRACE_EVENT_CONDITION(name, PARAMS(proto), \ > PARAMS(args), PARAMS(cond)) > > #define TRACE_EVENT(name, proto, args, struct, assign, print) \ > - DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) > + DECLARE_TRACE_EVENT(name, PARAMS(proto), PARAMS(args)) > #define TRACE_EVENT_FN(name, proto, args, struct, \ > assign, print, reg, unreg) \ > - DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) > -#define TRACE_EVENT_FN_COND(name, proto, args, cond, struct, \ > + DECLARE_TRACE_EVENT(name, PARAMS(proto), PARAMS(args)) > +#define TRACE_EVENT_FN_COND(name, proto, args, cond, struct, \ > assign, print, reg, unreg) \ > - DECLARE_TRACE_CONDITION(name, PARAMS(proto), \ > + DECLARE_TRACE_EVENT_CONDITION(name, PARAMS(proto), \ > PARAMS(args), PARAMS(cond)) > #define TRACE_EVENT_CONDITION(name, proto, args, cond, \ > struct, assign, print) \ > - DECLARE_TRACE_CONDITION(name, PARAMS(proto), \ > + DECLARE_TRACE_EVENT_CONDITION(name, PARAMS(proto), \ > PARAMS(args), PARAMS(cond)) > #define TRACE_EVENT_SYSCALL(name, proto, args, struct, assign, \ > print, reg, unreg) \ > - DECLARE_TRACE_SYSCALL(name, PARAMS(proto), PARAMS(args)) > + DECLARE_TRACE_EVENT_SYSCALL(name, PARAMS(proto), PARAMS(args)) > > #define TRACE_EVENT_FLAGS(event, flag) > > diff --git a/include/trace/bpf_probe.h b/include/trace/bpf_probe.h > index 183fa2aa2935..fbfe83b939ac 100644 > --- a/include/trace/bpf_probe.h > +++ b/include/trace/bpf_probe.h > @@ -119,8 +119,8 @@ static inline void bpf_test_buffer_##call(void) \ > > #undef DECLARE_TRACE > #define DECLARE_TRACE(call, proto, args) \ > - __BPF_DECLARE_TRACE(call, PARAMS(proto), PARAMS(args)) \ > - __DEFINE_EVENT(call, call, PARAMS(proto), PARAMS(args), 0) > + __BPF_DECLARE_TRACE(call##_tp, PARAMS(proto), PARAMS(args)) \ > + __DEFINE_EVENT(call##_tp, call##_tp, PARAMS(proto), PARAMS(args), 0) > > #undef DECLARE_TRACE_WRITABLE > #define DECLARE_TRACE_WRITABLE(call, proto, args, size) \ hi, do we need the change also for DECLARE_TRACE_WRITABLE? I needed change below for bpf selftest kmod jirka --- diff --git a/include/trace/bpf_probe.h b/include/trace/bpf_probe.h index fbfe83b939ac..9391d54d3f12 100644 --- a/include/trace/bpf_probe.h +++ b/include/trace/bpf_probe.h @@ -125,8 +125,8 @@ static inline void bpf_test_buffer_##call(void) \ #undef DECLARE_TRACE_WRITABLE #define DECLARE_TRACE_WRITABLE(call, proto, args, size) \ __CHECK_WRITABLE_BUF_SIZE(call, PARAMS(proto), PARAMS(args), size) \ - __BPF_DECLARE_TRACE(call, PARAMS(proto), PARAMS(args)) \ - __DEFINE_EVENT(call, call, PARAMS(proto), PARAMS(args), size) + __BPF_DECLARE_TRACE(call##_tp, PARAMS(proto), PARAMS(args)) \ + __DEFINE_EVENT(call##_tp, call##_tp, PARAMS(proto), PARAMS(args), size) #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) diff --git a/tools/testing/selftests/bpf/test_kmods/bpf_testmod-events.h b/tools/testing/selftests/bpf/test_kmods/bpf_testmod-events.h index aeef86b3da74..2bac14ef507f 100644 --- a/tools/testing/selftests/bpf/test_kmods/bpf_testmod-events.h +++ b/tools/testing/selftests/bpf/test_kmods/bpf_testmod-events.h @@ -42,7 +42,7 @@ DECLARE_TRACE(bpf_testmod_test_nullable_bare, struct sk_buff; -DECLARE_TRACE(bpf_testmod_test_raw_tp_null, +DECLARE_TRACE(bpf_testmod_test_raw_null, TP_PROTO(struct sk_buff *skb), TP_ARGS(skb) ); diff --git a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c index f38eaf0d35ef..dd9b806d255e 100644 --- a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c +++ b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c @@ -413,7 +413,7 @@ bpf_testmod_test_read(struct file *file, struct kobject *kobj, (void)bpf_testmod_test_arg_ptr_to_struct(&struct_arg1_2); - (void)trace_bpf_testmod_test_raw_tp_null(NULL); + (void)trace_bpf_testmod_test_raw_null_tp(NULL); bpf_testmod_test_struct_ops3(); @@ -431,14 +431,14 @@ bpf_testmod_test_read(struct file *file, struct kobject *kobj, if (bpf_testmod_loop_test(101) > 100) trace_bpf_testmod_test_read(current, &ctx); - trace_bpf_testmod_test_nullable_bare(NULL); + trace_bpf_testmod_test_nullable_bare_tp(NULL); /* Magic number to enable writable tp */ if (len == 64) { struct bpf_testmod_test_writable_ctx writable = { .val = 1024, }; - trace_bpf_testmod_test_writable_bare(&writable); + trace_bpf_testmod_test_writable_bare_tp(&writable); if (writable.early_ret) return snprintf(buf, len, "%d\n", writable.val); } @@ -470,7 +470,7 @@ bpf_testmod_test_write(struct file *file, struct kobject *kobj, .len = len, }; - trace_bpf_testmod_test_write_bare(current, &ctx); + trace_bpf_testmod_test_write_bare_tp(current, &ctx); return -EIO; /* always fail */ }