From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753381AbbEQK7l (ORCPT ); Sun, 17 May 2015 06:59:41 -0400 Received: from szxga01-in.huawei.com ([58.251.152.64]:61509 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753323AbbEQK6P (ORCPT ); Sun, 17 May 2015 06:58:15 -0400 From: Wang Nan To: , , , , , , , , , , CC: , , Subject: [RFC PATCH v3 31/37] perf bpf: Collect all eBPF programs Date: Sun, 17 May 2015 10:56:56 +0000 Message-ID: <1431860222-61636-32-git-send-email-wangnan0@huawei.com> X-Mailer: git-send-email 1.8.3.4 In-Reply-To: <1431860222-61636-1-git-send-email-wangnan0@huawei.com> References: <1431860222-61636-1-git-send-email-wangnan0@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.107.197.200] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch collects 'struct bpf_prog_handler *' after opening an object file. Handlers are stored into an array of MAX_PROBES slots. Signed-off-by: Wang Nan --- tools/perf/util/bpf-loader.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c index 17cd2b6..67bfb62 100644 --- a/tools/perf/util/bpf-loader.c +++ b/tools/perf/util/bpf-loader.c @@ -8,6 +8,7 @@ #include "perf.h" #include "debug.h" #include "bpf-loader.h" +#include "probe-finder.h" // for MAX_PROBES #define DEFINE_PRINT_FN(name, level) \ static int libbpf_##name(const char *fmt, ...) \ @@ -32,11 +33,17 @@ static bool libbpf_inited = false; struct { struct bpf_object *objects[MAX_OBJECTS]; size_t nr_objects; + + struct { + struct bpf_prog_handler *prog; + } progs[MAX_PROBES]; + size_t nr_progs; } params; int bpf_prepare_load(const char *filename) { struct bpf_object *obj; + struct bpf_prog_handler *prog; if (!libbpf_inited) libbpf_set_print(libbpf_warning, @@ -57,6 +64,24 @@ int bpf_prepare_load(const char *filename) } params.objects[params.nr_objects++] = obj; + + bpf_obj_for_each_prog(obj, prog) { + const char *title; + + if (params.nr_progs + 1 > MAX_PROBES) { + pr_err("Too many programs. " + "Increase MAX_PROBES\n"); + return -EMFILE; + } + + params.progs[params.nr_progs++].prog = prog; + + if (bpf_prog_get_title(prog, &title, false)) { + pr_err("Unable to get title of a program\n"); + return -EINVAL; + } + pr_debug("bpf: add program '%s'\n", title); + } return 0; } -- 1.8.3.4