tools lib bpf: Use IS_ERR() reporting macros with bpf_map__get_private()
Subsystems (3)
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: b4cbfa5670414a567a8a3b368047538f522eff6a Gitweb: http://git.kernel.org/tip/b4cbfa5670414a567a8a3b368047538f522eff6a Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Thu, 2 Jun 2016 10:51:59 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 6 Jun 2016 18:18:30 -0300
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 <[email protected]>
Cc Adrian Hunter <[email protected]>
Cc David Ahern <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Milian Wolff <[email protected]>
Cc Namhyung Kim <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/lib/bpf/libbpf.c | 9 ++------- tools/lib/bpf/libbpf.h | 2 +- tools/perf/util/bpf-loader.c | 23 +++++++++-------------- 3 files changed, 12 insertions(+), 22 deletions(-)
tools/lib/bpf/libbpf.c +2 -7
@@ -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 *
tools/lib/bpf/libbpf.h +1 -1
@@ -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
tools/perf/util/bpf-loader.c +9 -14
@@ -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 ;