On Fri, Apr 22, 2022 at 02:03:24PM -0300, Arnaldo Carvalho de Melo wrote: > Em Fri, Apr 22, 2022 at 12:00:23PM +0200, Jiri Olsa escreveu: > > Moving the libbpf init code into single function, > > so we have single place doing that. > > Cherry picked this one, waiting for Andrii to chime in wrt the libbpf > changes, if its acceptable, how to proceed, i.e. in what tree to carry > these? I think at this point it's ok with either yours perf/core or bpf-next/master, I waited for them to be in sync for this ;-) but as you pointed out there's issue with perf linked with dynamic libbpf, because the current version does not have the libbpf_register_prog_handler api that perf needs now.. also it needs the fix and api introduced in this patchset I'll check and perhaps we can temporirly disable perf/bpf prologue generation for dynamic linking..? until the libbpf release has all the needed changes jirka > > - Arnaldo > > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > > --- > > tools/perf/util/bpf-loader.c | 27 ++++++++++++++++++--------- > > 1 file changed, 18 insertions(+), 9 deletions(-) > > > > diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c > > index b72cef1ae959..f8ad581ea247 100644 > > --- a/tools/perf/util/bpf-loader.c > > +++ b/tools/perf/util/bpf-loader.c > > @@ -99,16 +99,26 @@ static int bpf_perf_object__add(struct bpf_object *obj) > > return perf_obj ? 0 : -ENOMEM; > > } > > > > +static int libbpf_init(void) > > +{ > > + if (libbpf_initialized) > > + return 0; > > + > > + libbpf_set_print(libbpf_perf_print); > > + libbpf_initialized = true; > > + return 0; > > +} > > + > > struct bpf_object * > > bpf__prepare_load_buffer(void *obj_buf, size_t obj_buf_sz, const char *name) > > { > > LIBBPF_OPTS(bpf_object_open_opts, opts, .object_name = name); > > struct bpf_object *obj; > > + int err; > > > > - if (!libbpf_initialized) { > > - libbpf_set_print(libbpf_perf_print); > > - libbpf_initialized = true; > > - } > > + err = libbpf_init(); > > + if (err) > > + return ERR_PTR(err); > > > > obj = bpf_object__open_mem(obj_buf, obj_buf_sz, &opts); > > if (IS_ERR_OR_NULL(obj)) { > > @@ -135,14 +145,13 @@ struct bpf_object *bpf__prepare_load(const char *filename, bool source) > > { > > LIBBPF_OPTS(bpf_object_open_opts, opts, .object_name = filename); > > struct bpf_object *obj; > > + int err; > > > > - if (!libbpf_initialized) { > > - libbpf_set_print(libbpf_perf_print); > > - libbpf_initialized = true; > > - } > > + err = libbpf_init(); > > + if (err) > > + return ERR_PTR(err); > > > > if (source) { > > - int err; > > void *obj_buf; > > size_t obj_buf_sz; > > > > -- > > 2.35.1 > > -- > > - Arnaldo