aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib/bpf/libbpf.c
diff options
context:
space:
mode:
authorWang Nan <wangnan0@huawei.com>2016-11-26 02:03:26 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-11-29 10:09:41 -0500
commit10931d2413478239bdceac5546cce85d7a497a4e (patch)
tree4697e2b409904b420ec00e04d01a186a781da106 /tools/lib/bpf/libbpf.c
parent9742da0150788e6ea7796372c3e643f876a49741 (diff)
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 <wangnan0@huawei.com> Acked-by: Alexei Starovoitov <ast@kernel.org> Cc: He Kuang <hekuang@huawei.com> Cc: Joe Stringer <joe@ovn.org> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/20161126070354.141764-3-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/lib/bpf/libbpf.c')
-rw-r--r--tools/lib/bpf/libbpf.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 96a2b2ff1212..866d5cdeffc7 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -229,6 +229,10 @@ struct bpf_object {
229 * all objects. 229 * all objects.
230 */ 230 */
231 struct list_head list; 231 struct list_head list;
232
233 void *priv;
234 bpf_object_clear_priv_t clear_priv;
235
232 char path[]; 236 char path[];
233}; 237};
234#define obj_elf_valid(o) ((o)->efile.elf) 238#define obj_elf_valid(o) ((o)->efile.elf)
@@ -1229,6 +1233,9 @@ void bpf_object__close(struct bpf_object *obj)
1229 if (!obj) 1233 if (!obj)
1230 return; 1234 return;
1231 1235
1236 if (obj->clear_priv)
1237 obj->clear_priv(obj, obj->priv);
1238
1232 bpf_object__elf_finish(obj); 1239 bpf_object__elf_finish(obj);
1233 bpf_object__unload(obj); 1240 bpf_object__unload(obj);
1234 1241
@@ -1282,6 +1289,22 @@ unsigned int bpf_object__kversion(struct bpf_object *obj)
1282 return obj ? obj->kern_version : 0; 1289 return obj ? obj->kern_version : 0;
1283} 1290}
1284 1291
1292int bpf_object__set_priv(struct bpf_object *obj, void *priv,
1293 bpf_object_clear_priv_t clear_priv)
1294{
1295 if (obj->priv && obj->clear_priv)
1296 obj->clear_priv(obj, obj->priv);
1297
1298 obj->priv = priv;
1299 obj->clear_priv = clear_priv;
1300 return 0;
1301}
1302
1303void *bpf_object__priv(struct bpf_object *obj)
1304{
1305 return obj ? obj->priv : ERR_PTR(-EINVAL);
1306}
1307
1285struct bpf_program * 1308struct bpf_program *
1286bpf_program__next(struct bpf_program *prev, struct bpf_object *obj) 1309bpf_program__next(struct bpf_program *prev, struct bpf_object *obj)
1287{ 1310{