Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752956AbbEKGmQ (ORCPT ); Mon, 11 May 2015 02:42:16 -0400 Received: from lgeamrelo04.lge.com ([156.147.1.127]:55813 "EHLO lgeamrelo04.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752901AbbEKGmL (ORCPT ); Mon, 11 May 2015 02:42:11 -0400 X-Original-SENDERIP: 10.177.220.203 X-Original-MAILFROM: namhyung@kernel.org Date: Mon, 11 May 2015 15:32:10 +0900 From: Namhyung Kim To: Wang Nan Cc: ast@plumgrid.com, davem@davemloft.net, acme@kernel.org, mingo@redhat.com, a.p.zijlstra@chello.nl, masami.hiramatsu.pt@hitachi.com, jolsa@kernel.org, lizefan@kernel.org, linux-kernel@vger.kernel.org, pi3orama@163.com, hekuang@huawei.com Subject: Re: [RFC PATCH 09/22] perf bpf: collect map definitions. Message-ID: <20150511063210.GC1630@sejong> References: <1430391165-30267-1-git-send-email-wangnan0@huawei.com> <1430391165-30267-10-git-send-email-wangnan0@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <1430391165-30267-10-git-send-email-wangnan0@huawei.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3357 Lines: 112 On Thu, Apr 30, 2015 at 10:52:32AM +0000, Wang Nan wrote: > If maps are used by eBPF programs, corresponding object file(s) should > contain a section named 'map'. Which contains map definitions, one for > each map to describe its format. 'struct perf_bpf_map_def' is > introduced as part of protocol between perf and eBPF programs. All map > definitions are copied to obj->maps. > > bpf.h is introduced for common bpf operations. > > Signed-off-by: Wang Nan > --- > tools/perf/util/bpf-loader.c | 31 +++++++++++++++++++++++++++++++ > tools/perf/util/bpf-loader.h | 3 +++ > 2 files changed, 34 insertions(+) > > diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c > index 296fb06..bf3b793 100644 > --- a/tools/perf/util/bpf-loader.c > +++ b/tools/perf/util/bpf-loader.c > @@ -65,6 +65,8 @@ static void bpf_obj_close(struct bpf_obj *obj) > > if (obj->path) > free(obj->path); > + if (obj->maps) > + free(obj->maps); > free(obj); > } > > @@ -183,6 +185,32 @@ static int bpf_obj_kver_init(struct bpf_obj *obj, > return 0; > } > > +static int bpf_obj_maps_init(struct bpf_obj *obj, void *data, > + size_t size) > +{ > + size_t map_def_sz = sizeof(struct bpf_map_def); > + int nr_maps = size / map_def_sz; > + > + if (nr_maps == 0) { > + pr_debug("bpf: %s doesn't need map definition\n", > + obj->path); > + return 0; > + } > + > + obj->maps = malloc(nr_maps * map_def_sz); > + if (!obj->maps) { > + pr_err("bpf: malloc maps failed: %s\n", obj->path); > + return -ENOMEM; > + } > + > + obj->nr_maps = nr_maps; > + memcpy(obj->maps, data, nr_maps * map_def_sz); Doesn't it need to swap the data as it's binary? Thanks, Namhyung > + pr_debug("bpf: %d map%s in %s\n", nr_maps, > + nr_maps > 1 ? "s" : "", > + obj->path); > + return 0; > +} > + > static int bpf_obj_elf_collect(struct bpf_obj *obj) > { > Elf *elf = obj->elf.elf; > @@ -237,6 +265,9 @@ static int bpf_obj_elf_collect(struct bpf_obj *obj) > else if (strcmp(name, "version") == 0) > err = bpf_obj_kver_init(obj, data->d_buf, > data->d_size); > + else if (strcmp(name, "maps") == 0) > + err = bpf_obj_maps_init(obj, data->d_buf, > + data->d_size); > if (err) > goto out; > } > diff --git a/tools/perf/util/bpf-loader.h b/tools/perf/util/bpf-loader.h > index e1d5c42..6c5c8d6 100644 > --- a/tools/perf/util/bpf-loader.h > +++ b/tools/perf/util/bpf-loader.h > @@ -14,6 +14,7 @@ > #include "perf.h" > #include "symbol.h" > #include "probe-event.h" > +#include "bpf.h" > > int bpf__load(const char *path); > int bpf__run(void); > @@ -25,6 +26,8 @@ struct bpf_obj { > bool needs_swap; > char license[64]; > u32 kern_version; > + struct bpf_map_def *maps; > + size_t nr_maps; > > /* > * Information when doing elf related work. Only valid if fd > -- > 1.8.3.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/