tools lib bpf: Use IS_ERR() reporting macros with bpf_map__get_private()
To try to, over time, consistently use the IS_ERR() interface instead of using two return values, i.e. the integer return value for an error and the pointer address to return the bpf_map->priv pointer. Also rename it to bpf__priv(), to leave the "get" term for reference counting. Noticed while working on using BPF for collecting non-integer syscall argument payloads (struct sockaddr in calls such as connect(), for instance), where we need to use BPF maps and thus generalise bpf__setup_stdout() to connect bpf_output events with maps in a bpf proggie. Acked-by: Wang Nan <wangnan0@huawei.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Milian Wolff <milian.wolff@kdab.com> Cc: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/n/tip-saypxyd6ptrct379jqgxx4bl@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
7db91f2510
Коммит
b4cbfa5670
|
@ -1351,14 +1351,9 @@ int bpf_map__set_private(struct bpf_map *map, void *priv,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int bpf_map__get_private(struct bpf_map *map, void **ppriv)
|
||||
void *bpf_map__priv(struct bpf_map *map)
|
||||
{
|
||||
if (!map)
|
||||
return -EINVAL;
|
||||
|
||||
if (ppriv)
|
||||
*ppriv = map->priv;
|
||||
return 0;
|
||||
return map ? map->priv : ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
struct bpf_map *
|
||||
|
|
|
@ -187,6 +187,6 @@ const char *bpf_map__get_name(struct bpf_map *map);
|
|||
typedef void (*bpf_map_clear_priv_t)(struct bpf_map *, void *);
|
||||
int bpf_map__set_private(struct bpf_map *map, void *priv,
|
||||
bpf_map_clear_priv_t clear_priv);
|
||||
int bpf_map__get_private(struct bpf_map *map, void **ppriv);
|
||||
void *bpf_map__priv(struct bpf_map *map);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -897,15 +897,13 @@ bpf_map_priv__clone(struct bpf_map_priv *priv)
|
|||
static int
|
||||
bpf_map__add_op(struct bpf_map *map, struct bpf_map_op *op)
|
||||
{
|
||||
struct bpf_map_priv *priv;
|
||||
struct bpf_map_priv *priv = bpf_map__priv(map);
|
||||
const char *map_name;
|
||||
int err;
|
||||
|
||||
map_name = bpf_map__get_name(map);
|
||||
err = bpf_map__get_private(map, (void **)&priv);
|
||||
if (err) {
|
||||
if (IS_ERR(priv)) {
|
||||
pr_debug("Failed to get private from map %s\n", map_name);
|
||||
return err;
|
||||
return PTR_ERR(priv);
|
||||
}
|
||||
|
||||
if (!priv) {
|
||||
|
@ -1264,12 +1262,11 @@ bpf_map_config_foreach_key(struct bpf_map *map,
|
|||
const char *name;
|
||||
struct bpf_map_op *op;
|
||||
struct bpf_map_def def;
|
||||
struct bpf_map_priv *priv;
|
||||
struct bpf_map_priv *priv = bpf_map__priv(map);
|
||||
|
||||
name = bpf_map__get_name(map);
|
||||
|
||||
err = bpf_map__get_private(map, (void **)&priv);
|
||||
if (err) {
|
||||
if (IS_ERR(priv)) {
|
||||
pr_debug("ERROR: failed to get private from map %s\n", name);
|
||||
return -BPF_LOADER_ERRNO__INTERNAL;
|
||||
}
|
||||
|
@ -1489,10 +1486,9 @@ int bpf__setup_stdout(struct perf_evlist *evlist __maybe_unused)
|
|||
bool need_init = false;
|
||||
|
||||
bpf__for_each_stdout_map(map, obj, tmp) {
|
||||
struct bpf_map_priv *priv;
|
||||
struct bpf_map_priv *priv = bpf_map__priv(map);
|
||||
|
||||
err = bpf_map__get_private(map, (void **)&priv);
|
||||
if (err)
|
||||
if (IS_ERR(priv))
|
||||
return -BPF_LOADER_ERRNO__INTERNAL;
|
||||
|
||||
/*
|
||||
|
@ -1520,10 +1516,9 @@ int bpf__setup_stdout(struct perf_evlist *evlist __maybe_unused)
|
|||
}
|
||||
|
||||
bpf__for_each_stdout_map(map, obj, tmp) {
|
||||
struct bpf_map_priv *priv;
|
||||
struct bpf_map_priv *priv = bpf_map__priv(map);
|
||||
|
||||
err = bpf_map__get_private(map, (void **)&priv);
|
||||
if (err)
|
||||
if (IS_ERR(priv))
|
||||
return -BPF_LOADER_ERRNO__INTERNAL;
|
||||
if (priv)
|
||||
continue;
|
||||
|
|
Загрузка…
Ссылка в новой задаче