On Tue, Mar 24, 2026 at 11:45 PM Leon Hwang <[email protected]> wrote: > > > + > > + btf = btf__load_vmlinux_btf(); > > + if (!ASSERT_OK_PTR(btf, "btf__load_vmlinux_btf")) > > + return;> + > > + skel = tracing_multi_bench__open_and_load(); > > + if (!ASSERT_OK_PTR(skel, "tracing_multi_bench__open_and_load")) > > + goto cleanup; > > + > > + if (!ASSERT_OK(bpf_get_ksyms(&ksyms, true), "get_syms")) > > + goto cleanup; > > + > > + /* Get all ftrace 'safe' symbols.. */ > > + for (i = 0; i < ksyms->filtered_cnt; i++) { > > + if (is_unsafe_function(ksyms->filtered_syms[i])) > > + continue; > > + tsearch(&ksyms->filtered_syms[i], &root, compare); > > + } > > + > > + /* ..and filter them through BTF and btf_type_is_traceable_func. */ > > + nr = btf__type_cnt(btf); > > + for (type_id = 1; type_id < nr; type_id++) { > > + const struct btf_type *type; > > + const char *str; > > + > > + type = btf__type_by_id(btf, type_id); > > + if (!type) > > + break; > > + > > + if (BTF_INFO_KIND(type->info) != BTF_KIND_FUNC) > > + continue; > > + > > + str = btf__name_by_offset(btf, type->name_off); > > + if (!str) > > + break; > > + > > + if (!tfind(&str, &root, compare)) > > + continue; > > + > > + if (!btf_type_is_traceable_func(btf, type)) > > + continue; > > + > > + err = libbpf_ensure_mem((void **) &ids, &cap, sizeof(*ids), > > cnt + 1); > > + if (err) > > + goto cleanup; > > + > > + ids[cnt++] = type_id; > > + } > > + > > + opts.ids = ids; > > + opts.cnt = cnt; > > + > > + attach_start_ns = get_time_ns(); > > + link = bpf_program__attach_tracing_multi(skel->progs.bench, NULL, > > &opts); > > + attach_end_ns = get_time_ns(); > > + > > + if (!ASSERT_OK_PTR(link, "bpf_program__attach_tracing_multi")) > > + goto cleanup; > > + > > + detach_start_ns = get_time_ns(); > > + bpf_link__destroy(link); > > + detach_end_ns = get_time_ns(); > > + > > + attach_delta = (attach_end_ns - attach_start_ns) / 1000000000.0; > > + detach_delta = (detach_end_ns - detach_start_ns) / 1000000000.0; > > + > > + printf("%s: found %lu functions\n", __func__, cnt); > > + printf("%s: attached in %7.3lfs\n", __func__, attach_delta); > > + printf("%s: detached in %7.3lfs\n", __func__, detach_delta); > > + > > +cleanup: > > + tracing_multi_bench__destroy(skel); > > + tdestroy(root, tdestroy_free_nop); > > + free_kallsyms_local(ksyms); > > + free(ids); > > Is btf__free(btf) missing here? Since 'btf' was calloc inner > btf__load_vmlinux_btf().
Good point. Leon, please trim your replies. No need to quote the whole patch. btw sashiko caught it too: https://sashiko.dev/#/patchset/20260324081846.2334094-1-jolsa%40kernel.org and many other bugs beyond what bpf CI could find. Jiri, please address them all.
