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.

Reply via email to