> On Mar 11, 2019, at 10:56 AM, Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > On Thu, Mar 07, 2019 at 09:58:02AM -0800, Song Liu wrote: >> This patch enables perf-record to save bpf_prog_info information as >> headers to perf.data. A new header type HEADER_BPF_PROG_INFO is >> introduced for this data. >> >> Signed-off-by: Song Liu <songliubraving@xxxxxx> >> --- >> tools/perf/util/header.c | 145 ++++++++++++++++++++++++++++++++++++++- >> tools/perf/util/header.h | 1 + >> 2 files changed, 145 insertions(+), 1 deletion(-) >> >> diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c >> index 4b88de5e9192..f0708188211e 100644 >> --- a/tools/perf/util/header.c >> +++ b/tools/perf/util/header.c >> @@ -18,6 +18,7 @@ >> #include <sys/utsname.h> >> #include <linux/time64.h> >> #include <dirent.h> >> +#include <bpf/libbpf.h> >> >> #include "evlist.h" >> #include "evsel.h" >> @@ -39,6 +40,7 @@ >> #include "tool.h" >> #include "time-utils.h" >> #include "units.h" >> +#include "bpf-event.h" >> >> #include "sane_ctype.h" >> >> @@ -1074,6 +1076,54 @@ static int write_clockid(struct feat_fd *ff, >> sizeof(ff->ph->env.clockid_res_ns)); >> } >> >> +static int write_bpf_prog_info(struct feat_fd *ff, >> + struct perf_evlist *evlist __maybe_unused) >> +{ >> + struct perf_env *env = &ff->ph->env; >> + struct rb_root *root; >> + struct rb_node *next; >> + u32 count = 0; >> + int ret; >> + >> + down_read(&env->bpf_progs.lock); >> + >> + root = &env->bpf_progs.infos; >> + next = rb_first(root); >> + while (next) { >> + ++count; >> + next = rb_next(next); >> + } > > sry I did not se this before, but why you don't keep program count > in perf_env::bpf_progs::infos_cnt ? > > jirka Good idea... I didn't think about this carefully. Will fix in next version. Thanks, Song