The bpf_perf_event_output helper is used by various tracer BPF program types, but it was not visible outside of bpf_trace.c. In order to make it available to tracer BPF program types that are implemented elsewhere, a function is added similar to bpf_get_trace_printk_proto() to query the prototype (bpf_get_perf_event_output_proto()). Signed-off-by: Kris Van Hees <kris.van.hees@xxxxxxxxxx> Reviewed-by: Nick Alcock <nick.alcock@xxxxxxxxxx> --- include/linux/bpf.h | 1 + kernel/trace/bpf_trace.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 7a40a3cd7ff2..e4bcb79656c4 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -479,6 +479,7 @@ bool bpf_prog_array_compatible(struct bpf_array *array, const struct bpf_prog *f int bpf_prog_calc_tag(struct bpf_prog *fp); const struct bpf_func_proto *bpf_get_trace_printk_proto(void); +const struct bpf_func_proto *bpf_get_perf_event_output_proto(void); typedef unsigned long (*bpf_ctx_copy_t)(void *dst, const void *src, unsigned long off, unsigned long len); diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index b496ffdf5f36..3d812238bc40 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -473,6 +473,12 @@ static const struct bpf_func_proto bpf_perf_event_output_proto = { .arg5_type = ARG_CONST_SIZE_OR_ZERO, }; +const struct bpf_func_proto *bpf_get_perf_event_output_proto(void) +{ + return &bpf_perf_event_output_proto; +} + + static DEFINE_PER_CPU(struct pt_regs, bpf_pt_regs); static DEFINE_PER_CPU(struct perf_sample_data, bpf_misc_sd); -- 2.20.1