Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934022AbcLBKh7 (ORCPT ); Fri, 2 Dec 2016 05:37:59 -0500 Received: from terminus.zytor.com ([198.137.202.10]:41556 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932755AbcLBKh5 (ORCPT ); Fri, 2 Dec 2016 05:37:57 -0500 Date: Fri, 2 Dec 2016 02:37:38 -0800 From: tip-bot for Wang Nan Message-ID: Cc: hpa@zytor.com, tglx@linutronix.de, hekuang@huawei.com, mingo@kernel.org, joe@ovn.org, ast@kernel.org, linux-kernel@vger.kernel.org, wangnan0@huawei.com, lizefan@huawei.com, acme@redhat.com Reply-To: hekuang@huawei.com, mingo@kernel.org, joe@ovn.org, tglx@linutronix.de, hpa@zytor.com, acme@redhat.com, lizefan@huawei.com, wangnan0@huawei.com, linux-kernel@vger.kernel.org, ast@kernel.org In-Reply-To: <20161126070354.141764-3-wangnan0@huawei.com> References: <20161126070354.141764-3-wangnan0@huawei.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] tools lib bpf: Add private field for bpf_object Git-Commit-ID: 10931d2413478239bdceac5546cce85d7a497a4e X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2751 Lines: 89 Commit-ID: 10931d2413478239bdceac5546cce85d7a497a4e Gitweb: http://git.kernel.org/tip/10931d2413478239bdceac5546cce85d7a497a4e Author: Wang Nan AuthorDate: Sat, 26 Nov 2016 07:03:26 +0000 Committer: Arnaldo Carvalho de Melo CommitDate: Tue, 29 Nov 2016 12:09:41 -0300 tools lib bpf: Add private field for bpf_object Similar to other classes defined in libbpf.h (map and program), allow 'object' class has its own private data. Signed-off-by: Wang Nan Acked-by: Alexei Starovoitov Cc: He Kuang Cc: Joe Stringer Cc: Zefan Li Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/20161126070354.141764-3-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/lib/bpf/libbpf.c | 23 +++++++++++++++++++++++ tools/lib/bpf/libbpf.h | 5 +++++ 2 files changed, 28 insertions(+) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 96a2b2f..866d5cd 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -229,6 +229,10 @@ struct bpf_object { * all objects. */ struct list_head list; + + void *priv; + bpf_object_clear_priv_t clear_priv; + char path[]; }; #define obj_elf_valid(o) ((o)->efile.elf) @@ -1229,6 +1233,9 @@ void bpf_object__close(struct bpf_object *obj) if (!obj) return; + if (obj->clear_priv) + obj->clear_priv(obj, obj->priv); + bpf_object__elf_finish(obj); bpf_object__unload(obj); @@ -1282,6 +1289,22 @@ unsigned int bpf_object__kversion(struct bpf_object *obj) return obj ? obj->kern_version : 0; } +int bpf_object__set_priv(struct bpf_object *obj, void *priv, + bpf_object_clear_priv_t clear_priv) +{ + if (obj->priv && obj->clear_priv) + obj->clear_priv(obj, obj->priv); + + obj->priv = priv; + obj->clear_priv = clear_priv; + return 0; +} + +void *bpf_object__priv(struct bpf_object *obj) +{ + return obj ? obj->priv : ERR_PTR(-EINVAL); +} + struct bpf_program * bpf_program__next(struct bpf_program *prev, struct bpf_object *obj) { diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index dd7a513..0c0b012 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -79,6 +79,11 @@ struct bpf_object *bpf_object__next(struct bpf_object *prev); (pos) != NULL; \ (pos) = (tmp), (tmp) = bpf_object__next(tmp)) +typedef void (*bpf_object_clear_priv_t)(struct bpf_object *, void *); +int bpf_object__set_priv(struct bpf_object *obj, void *priv, + bpf_object_clear_priv_t clear_priv); +void *bpf_object__priv(struct bpf_object *prog); + /* Accessors of bpf_program. */ struct bpf_program; struct bpf_program *bpf_program__next(struct bpf_program *prog,