Commit 10931d24 authored by Wang Nan's avatar Wang Nan Committed by Arnaldo Carvalho de Melo

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: default avatarWang Nan <wangnan0@huawei.com>
Acked-by: default avatarAlexei 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.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 9742da01
...@@ -229,6 +229,10 @@ struct bpf_object { ...@@ -229,6 +229,10 @@ struct bpf_object {
* all objects. * all objects.
*/ */
struct list_head list; struct list_head list;
void *priv;
bpf_object_clear_priv_t clear_priv;
char path[]; char path[];
}; };
#define obj_elf_valid(o) ((o)->efile.elf) #define obj_elf_valid(o) ((o)->efile.elf)
...@@ -1229,6 +1233,9 @@ void bpf_object__close(struct bpf_object *obj) ...@@ -1229,6 +1233,9 @@ void bpf_object__close(struct bpf_object *obj)
if (!obj) if (!obj)
return; return;
if (obj->clear_priv)
obj->clear_priv(obj, obj->priv);
bpf_object__elf_finish(obj); bpf_object__elf_finish(obj);
bpf_object__unload(obj); bpf_object__unload(obj);
...@@ -1282,6 +1289,22 @@ unsigned int bpf_object__kversion(struct bpf_object *obj) ...@@ -1282,6 +1289,22 @@ unsigned int bpf_object__kversion(struct bpf_object *obj)
return obj ? obj->kern_version : 0; 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 * struct bpf_program *
bpf_program__next(struct bpf_program *prev, struct bpf_object *obj) bpf_program__next(struct bpf_program *prev, struct bpf_object *obj)
{ {
......
...@@ -79,6 +79,11 @@ struct bpf_object *bpf_object__next(struct bpf_object *prev); ...@@ -79,6 +79,11 @@ struct bpf_object *bpf_object__next(struct bpf_object *prev);
(pos) != NULL; \ (pos) != NULL; \
(pos) = (tmp), (tmp) = bpf_object__next(tmp)) (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. */ /* Accessors of bpf_program. */
struct bpf_program; struct bpf_program;
struct bpf_program *bpf_program__next(struct bpf_program *prog, struct bpf_program *bpf_program__next(struct bpf_program *prog,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment