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) | ^ 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 > >