diff options
author | Wang Nan <wangnan0@huawei.com> | 2016-11-26 02:03:26 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-11-29 10:09:41 -0500 |
commit | 10931d2413478239bdceac5546cce85d7a497a4e (patch) | |
tree | 4697e2b409904b420ec00e04d01a186a781da106 /tools/lib/bpf/libbpf.c | |
parent | 9742da0150788e6ea7796372c3e643f876a49741 (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.c | 23 |
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 | ||
1292 | int 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 | |||
1303 | void *bpf_object__priv(struct bpf_object *obj) | ||
1304 | { | ||
1305 | return obj ? obj->priv : ERR_PTR(-EINVAL); | ||
1306 | } | ||
1307 | |||
1285 | struct bpf_program * | 1308 | struct bpf_program * |
1286 | bpf_program__next(struct bpf_program *prev, struct bpf_object *obj) | 1309 | bpf_program__next(struct bpf_program *prev, struct bpf_object *obj) |
1287 | { | 1310 | { |