Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4cbfa56 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

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: default avatarWang 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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 7db91f25
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -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 *
+1 −1
Original line number Diff line number Diff line
@@ -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
+9 −14
Original line number Diff line number Diff line
@@ -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;