On Mon, Feb 25, 2019 at 04:20:19PM -0800, Song Liu wrote: SNIP
> + btf_id = info_linear->info.btf_id; > + > + info_node = malloc(sizeof(struct bpf_prog_info_node)); > + if (info_node) { > + info_node->info_linear = info_linear; > + perf_env__insert_bpf_prog_info(env, info_node); > + } else > + free(info_linear); > + > + if (btf_id == 0) > + goto out; > + > + if (btf__get_from_id(btf_id, &btf)) { > + pr_debug("%s: failed to get BTF of id %u, aborting\n", > + __func__, btf_id); > + goto out; > + } > + perf_env__fetch_btf(env, btf_id, btf); so is this the main reason we are doing this? getting the btf data for bpf prog ids and store them? please describe the whole bpf events/features data flow in changelog as I asked in previous email thanks, jirka