hi, adding tracing_multi link support that allows fast attachment of tracing program to many functions.
RFC version: https://lore.kernel.org/bpf/[email protected]/ v1: https://lore.kernel.org/bpf/[email protected]/ v2 changes: - allocate data.unreg in bpf_trampoline_multi_attach for rollback path [ci] and fixed link count setup in rollback path [ci] - several small assorted fixes [ci] - added loongarch and powerpc changes for struct bpf_tramp_node change - added support to attach functions from modules - added tests for sleepable programs - added rollback tests v1 changes: - added ftrace_hash_count as wrapper for hash_count [Steven] - added trampoline mutex pool [Andrii] - reworked 'struct bpf_tramp_node' separatoin [Andrii] - the 'struct bpf_tramp_node' now holds pointer to bpf_link, which is similar to what we do for uprobe_multi; I understand it's not a fundamental change compared to previous version which used bpf_prog pointer instead, but I don't see better way of doing this.. I'm happy to discuss this further if there's better idea - reworked 'struct bpf_fsession_link' based on bpf_tramp_node - made btf__find_by_glob_kind function internal helper [Andrii] - many small assorted fixes [Andrii,CI] - added session support [Leon Hwang] - added cookies support - added more tests Note I plan to send linkinfo support separately, the patchset is big enough. thanks, jirka --- Jiri Olsa (23): ftrace: Add ftrace_hash_count function bpf: Use mutex lock pool for bpf trampolines bpf: Add struct bpf_trampoline_ops object bpf: Add struct bpf_tramp_node object bpf: Factor fsession link to use struct bpf_tramp_node bpf: Add multi tracing attach types bpf: Move sleepable verification code to btf_id_allow_sleepable bpf: Add bpf_trampoline_multi_attach/detach functions bpf: Add support for tracing multi link bpf: Add support for tracing_multi link cookies bpf: Add support for tracing_multi link session bpf: Add support for tracing_multi link fdinfo libbpf: Add bpf_object_cleanup_btf function libbpf: Add bpf_link_create support for tracing_multi link libbpf: Add support to create tracing multi link selftests/bpf: Add tracing multi skel/pattern/ids attach tests selftests/bpf: Add tracing multi skel/pattern/ids module attach tests selftests/bpf: Add tracing multi intersect tests selftests/bpf: Add tracing multi cookies test selftests/bpf: Add tracing multi session test selftests/bpf: Add tracing multi attach fails test selftests/bpf: Add tracing multi attach benchmark test selftests/bpf: Add tracing multi rollback tests arch/arm64/net/bpf_jit_comp.c | 58 +++--- arch/loongarch/net/bpf_jit.c | 44 ++--- arch/powerpc/net/bpf_jit_comp.c | 46 ++--- arch/riscv/net/bpf_jit_comp64.c | 52 ++--- arch/s390/net/bpf_jit_comp.c | 44 ++--- arch/x86/net/bpf_jit_comp.c | 54 +++--- include/linux/bpf.h | 91 ++++++--- include/linux/bpf_types.h | 1 + include/linux/bpf_verifier.h | 3 + include/linux/btf_ids.h | 1 + include/linux/ftrace.h | 1 + include/linux/trace_events.h | 6 + include/uapi/linux/bpf.h | 9 + kernel/bpf/bpf_struct_ops.c | 27 +-- kernel/bpf/btf.c | 4 + kernel/bpf/syscall.c | 88 ++++++--- kernel/bpf/trampoline.c | 511 +++++++++++++++++++++++++++++++++++++++--------- kernel/bpf/verifier.c | 116 +++++++---- kernel/trace/bpf_trace.c | 147 +++++++++++++- kernel/trace/ftrace.c | 7 +- net/bpf/bpf_dummy_struct_ops.c | 14 +- net/bpf/test_run.c | 3 + tools/include/uapi/linux/bpf.h | 10 + tools/lib/bpf/bpf.c | 9 + tools/lib/bpf/bpf.h | 5 + tools/lib/bpf/libbpf.c | 329 ++++++++++++++++++++++++++++++- tools/lib/bpf/libbpf.h | 15 ++ tools/lib/bpf/libbpf.map | 1 + tools/testing/selftests/bpf/Makefile | 9 +- tools/testing/selftests/bpf/prog_tests/tracing_multi.c | 896 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/testing/selftests/bpf/progs/tracing_multi_attach.c | 40 ++++ tools/testing/selftests/bpf/progs/tracing_multi_attach_module.c | 26 +++ tools/testing/selftests/bpf/progs/tracing_multi_bench.c | 13 ++ tools/testing/selftests/bpf/progs/tracing_multi_check.c | 215 ++++++++++++++++++++ tools/testing/selftests/bpf/progs/tracing_multi_fail.c | 19 ++ tools/testing/selftests/bpf/progs/tracing_multi_intersect_attach.c | 42 ++++ tools/testing/selftests/bpf/progs/tracing_multi_rollback.c | 25 +++ tools/testing/selftests/bpf/progs/tracing_multi_session_attach.c | 27 +++ 38 files changed, 2642 insertions(+), 366 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/tracing_multi.c create mode 100644 tools/testing/selftests/bpf/progs/tracing_multi_attach.c create mode 100644 tools/testing/selftests/bpf/progs/tracing_multi_attach_module.c create mode 100644 tools/testing/selftests/bpf/progs/tracing_multi_bench.c create mode 100644 tools/testing/selftests/bpf/progs/tracing_multi_check.c create mode 100644 tools/testing/selftests/bpf/progs/tracing_multi_fail.c create mode 100644 tools/testing/selftests/bpf/progs/tracing_multi_intersect_attach.c create mode 100644 tools/testing/selftests/bpf/progs/tracing_multi_rollback.c create mode 100644 tools/testing/selftests/bpf/progs/tracing_multi_session_attach.c
