On Fri, Mar 22, 2024 at 6:12 AM Jiri Olsa <olsajiri@xxxxxxxxx> wrote: > > On Thu, Mar 21, 2024 at 05:00:40PM -0700, Andrii Nakryiko wrote: > > Add a simple bpf_test_tp() kfunc, available to all program types, that > > is useful for various testing and benchmarking scenarios, as it allows > > to trigger most tracing BPF program types from BPF side, allowing to do > > complex testing and benchmarking scenarios. > > > > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > > I'm getting compilation fail with this one: > > INSTALL libsubcmd_headers > INSTALL libsubcmd_headers > CALL scripts/checksyscalls.sh > CC kernel/bpf/helpers.o > In file included from kernel/bpf/bpf_test.h:34, > from kernel/bpf/helpers.c:30: > ./include/trace/define_trace.h:95:42: fatal error: ./bpf_test.h: No such file or directory > 95 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) > | ^ > I can't repro even with a clean build. CI also doesn't see any problem ([0]). Maybe we need to have #include "trace_probe.h" #include "trace.h" Not sure, can you please try? I tried to do everything just like we do it in kernel/trace/bpf_trace.c with trace_bpf_trace_printk(). [0] https://github.com/kernel-patches/bpf/actions/runs/8383349803 > jirka > > > --- > > kernel/bpf/bpf_test.h | 34 ++++++++++++++++++++++++++++++++++ > > kernel/bpf/helpers.c | 13 +++++++++++++ > > 2 files changed, 47 insertions(+) > > create mode 100644 kernel/bpf/bpf_test.h > > > > diff --git a/kernel/bpf/bpf_test.h b/kernel/bpf/bpf_test.h > > new file mode 100644 > > index 000000000000..c779927d3574 > > --- /dev/null > > +++ b/kernel/bpf/bpf_test.h > > @@ -0,0 +1,34 @@ > > +/* SPDX-License-Identifier: GPL-2.0 */ > > +#undef TRACE_SYSTEM > > +#define TRACE_SYSTEM bpf_test > > + > > +#if !defined(_TRACE_BPF_TEST_H) || defined(TRACE_HEADER_MULTI_READ) > > + > > +#define _TRACE_BPF_TEST_H > > + > > +#include <linux/tracepoint.h> > > + > > +TRACE_EVENT(bpf_test, > > + > > + TP_PROTO(int nonce), > > + > > + TP_ARGS(nonce), > > + > > + TP_STRUCT__entry( > > + __field(int, nonce) > > + ), > > + > > + TP_fast_assign( > > + __entry->nonce = nonce; > > + ), > > + > > + TP_printk("nonce %d", __entry->nonce) > > +); > > + > > +#endif /* _TRACE_BPF_TEST_H */ > > + > > +#undef TRACE_INCLUDE_PATH > > +#define TRACE_INCLUDE_PATH . > > +#define TRACE_INCLUDE_FILE bpf_test > > + > > +#include <trace/define_trace.h> > > diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c > > index 9234174ccb21..67bf9659c447 100644 > > --- a/kernel/bpf/helpers.c > > +++ b/kernel/bpf/helpers.c > > @@ -26,6 +26,10 @@ > > > > #include "../../lib/kstrtox.h" > > > > +#define CREATE_TRACE_POINTS > > +#include "bpf_test.h" > > + > > + > > /* If kernel subsystem is allowing eBPF programs to call this function, > > * inside its own verifier_ops->get_func_proto() callback it should return > > * bpf_map_lookup_elem_proto, so that verifier can properly check the arguments > > @@ -2549,6 +2553,14 @@ __bpf_kfunc void bpf_throw(u64 cookie) > > WARN(1, "A call to BPF exception callback should never return\n"); > > } > > > > +__bpf_kfunc int bpf_test_tp(int nonce) > > +{ > > + trace_bpf_test(nonce); > > + > > + return nonce; > > +} > > +ALLOW_ERROR_INJECTION(bpf_test_tp, ERRNO); > > + > > __bpf_kfunc_end_defs(); > > > > BTF_KFUNCS_START(generic_btf_ids) > > @@ -2625,6 +2637,7 @@ BTF_ID_FLAGS(func, bpf_dynptr_is_null) > > BTF_ID_FLAGS(func, bpf_dynptr_is_rdonly) > > BTF_ID_FLAGS(func, bpf_dynptr_size) > > BTF_ID_FLAGS(func, bpf_dynptr_clone) > > +BTF_ID_FLAGS(func, bpf_test_tp) > > BTF_KFUNCS_END(common_btf_ids) > > > > static const struct btf_kfunc_id_set common_kfunc_set = { > > -- > > 2.43.0 > > > >