tools lib bpf: Use IS_ERR() reporting macros with bpf_map__get_private()
authorArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 2 Jun 2016 13:51:59 +0000 (10:51 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 6 Jun 2016 21:18:30 +0000 (18:18 -0300)
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>
tools/lib/bpf/libbpf.c
tools/lib/bpf/libbpf.h
tools/perf/util/bpf-loader.c

index 7e543c3102d4118a09717bb6fb4c0f779532ae91..9bba1a907abee7c7f78f86b1a9c46095bfcee83d 100644 (file)
@@ -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 *
index a51594c7b51865140f6e6b42c8d1400b951bea82..916abf971249b6b2dd78cdf88262cc0357566595 100644 (file)
@@ -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
index 493307d1414ced463a935ae30ea00bc85c3585e8..e9a034e86b91ad18b0a00bb6da178cbfcfe19f7a 100644 (file)
@@ -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;