tools: Replace btf__get_from_id() with btf__load_from_kernel_by_id()
authorQuentin Monnet <quentin@isovalent.com>
Thu, 29 Jul 2021 16:20:25 +0000 (17:20 +0100)
committerAndrii Nakryiko <andrii@kernel.org>
Fri, 30 Jul 2021 00:23:52 +0000 (17:23 -0700)
Replace the calls to function btf__get_from_id(), which we plan to
deprecate before the library reaches v1.0, with calls to
btf__load_from_kernel_by_id() in tools/ (bpftool, perf, selftests).
Update the surrounding code accordingly (instead of passing a pointer to
the btf struct, get it as a return value from the function).

Signed-off-by: Quentin Monnet <quentin@isovalent.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/bpf/20210729162028.29512-6-quentin@isovalent.com
tools/bpf/bpftool/btf.c
tools/bpf/bpftool/btf_dumper.c
tools/bpf/bpftool/map.c
tools/bpf/bpftool/prog.c
tools/perf/util/bpf-event.c
tools/perf/util/bpf_counter.c
tools/testing/selftests/bpf/prog_tests/btf.c

index 385d5c955cf3de3df3c15edd84e255e21aecbd9f..9162a18e84c073db7c4ac45e957ee9dd2cf4972d 100644 (file)
@@ -580,16 +580,12 @@ static int do_dump(int argc, char **argv)
        }
 
        if (!btf) {
-               err = btf__get_from_id(btf_id, &btf);
+               btf = btf__load_from_kernel_by_id(btf_id);
+               err = libbpf_get_error(btf);
                if (err) {
                        p_err("get btf by id (%u): %s", btf_id, strerror(err));
                        goto done;
                }
-               if (!btf) {
-                       err = -ENOENT;
-                       p_err("can't find btf with ID (%u)", btf_id);
-                       goto done;
-               }
        }
 
        if (dump_c) {
index 7ca54d046362c0ac7b1ce5de3e95a89bac2c2bcc..9c25286a5c737972959e08a989b6271f3c8dca1e 100644 (file)
@@ -64,8 +64,10 @@ static int dump_prog_id_as_func_ptr(const struct btf_dumper *d,
        }
        info = &prog_info->info;
 
-       if (!info->btf_id || !info->nr_func_info ||
-           btf__get_from_id(info->btf_id, &prog_btf))
+       if (!info->btf_id || !info->nr_func_info)
+               goto print;
+       prog_btf = btf__load_from_kernel_by_id(info->btf_id);
+       if (libbpf_get_error(prog_btf))
                goto print;
        finfo = u64_to_ptr(info->func_info);
        func_type = btf__type_by_id(prog_btf, finfo->type_id);
index 09ae0381205b69299bb852398b67597a3d113879..7e7f748bb0be190ed970050adcc261f8520cb1c6 100644 (file)
@@ -807,10 +807,11 @@ static struct btf *get_map_kv_btf(const struct bpf_map_info *info)
        } else if (info->btf_value_type_id) {
                int err;
 
-               err = btf__get_from_id(info->btf_id, &btf);
-               if (err || !btf) {
+               btf = btf__load_from_kernel_by_id(info->btf_id);
+               err = libbpf_get_error(btf);
+               if (err) {
                        p_err("failed to get btf");
-                       btf = err ? ERR_PTR(err) : ERR_PTR(-ESRCH);
+                       btf = ERR_PTR(err);
                }
        }
 
@@ -1039,11 +1040,10 @@ static void print_key_value(struct bpf_map_info *info, void *key,
                            void *value)
 {
        json_writer_t *btf_wtr;
-       struct btf *btf = NULL;
-       int err;
+       struct btf *btf;
 
-       err = btf__get_from_id(info->btf_id, &btf);
-       if (err) {
+       btf = btf__load_from_kernel_by_id(info->btf_id);
+       if (libbpf_get_error(btf)) {
                p_err("failed to get btf");
                return;
        }
index 9d709b427665586e8edf6cdb2ddc2dda7b1f785b..b1996b8f1d4223837c7d47bbb225c14465702f23 100644 (file)
@@ -249,10 +249,10 @@ static void show_prog_metadata(int fd, __u32 num_maps)
        struct bpf_map_info map_info;
        struct btf_var_secinfo *vsi;
        bool printed_header = false;
-       struct btf *btf = NULL;
        unsigned int i, vlen;
        void *value = NULL;
        const char *name;
+       struct btf *btf;
        int err;
 
        if (!num_maps)
@@ -263,8 +263,8 @@ static void show_prog_metadata(int fd, __u32 num_maps)
        if (!value)
                return;
 
-       err = btf__get_from_id(map_info.btf_id, &btf);
-       if (err || !btf)
+       btf = btf__load_from_kernel_by_id(map_info.btf_id);
+       if (libbpf_get_error(btf))
                goto out_free;
 
        t_datasec = btf__type_by_id(btf, map_info.btf_value_type_id);
@@ -646,9 +646,12 @@ prog_dump(struct bpf_prog_info *info, enum dump_mode mode,
                member_len = info->xlated_prog_len;
        }
 
-       if (info->btf_id && btf__get_from_id(info->btf_id, &btf)) {
-               p_err("failed to get btf");
-               return -1;
+       if (info->btf_id) {
+               btf = btf__load_from_kernel_by_id(info->btf_id);
+               if (libbpf_get_error(btf)) {
+                       p_err("failed to get btf");
+                       return -1;
+               }
        }
 
        func_info = u64_to_ptr(info->func_info);
@@ -2014,12 +2017,17 @@ static char *profile_target_name(int tgt_fd)
                return NULL;
        }
 
-       if (info_linear->info.btf_id == 0 ||
-           btf__get_from_id(info_linear->info.btf_id, &btf)) {
+       if (info_linear->info.btf_id == 0) {
                p_err("prog FD %d doesn't have valid btf", tgt_fd);
                goto out;
        }
 
+       btf = btf__load_from_kernel_by_id(info_linear->info.btf_id);
+       if (libbpf_get_error(btf)) {
+               p_err("failed to load btf for prog FD %d", tgt_fd);
+               goto out;
+       }
+
        func_info = u64_to_ptr(info_linear->info.func_info);
        t = btf__type_by_id(btf, func_info[0].type_id);
        if (!t) {
index 17a9844e4fbf80aac4a127af362bcc72e0ba3384..996d025b8ed83ef2dc90913e1af7d4677c723e5b 100644 (file)
@@ -223,10 +223,10 @@ static int perf_event__synthesize_one_bpf_prog(struct perf_session *session,
                        free(info_linear);
                        return -1;
                }
-               if (btf__get_from_id(info->btf_id, &btf)) {
+               btf = btf__load_from_kernel_by_id(info->btf_id);
+               if (libbpf_get_error(btf)) {
                        pr_debug("%s: failed to get BTF of id %u, aborting\n", __func__, info->btf_id);
                        err = -1;
-                       btf = NULL;
                        goto out;
                }
                perf_env__fetch_btf(env, info->btf_id, btf);
@@ -478,7 +478,8 @@ static void perf_env__add_bpf_info(struct perf_env *env, u32 id)
        if (btf_id == 0)
                goto out;
 
-       if (btf__get_from_id(btf_id, &btf)) {
+       btf = btf__load_from_kernel_by_id(btf_id);
+       if (libbpf_get_error(btf)) {
                pr_debug("%s: failed to get BTF of id %u, aborting\n",
                         __func__, btf_id);
                goto out;
index beca55129b0b27ad60e8bf26fe2a077355c5576a..ba0f208536511f57a5adf65da78073965bce4ecc 100644 (file)
@@ -74,12 +74,17 @@ static char *bpf_target_prog_name(int tgt_fd)
                return NULL;
        }
 
-       if (info_linear->info.btf_id == 0 ||
-           btf__get_from_id(info_linear->info.btf_id, &btf)) {
+       if (info_linear->info.btf_id == 0) {
                pr_debug("prog FD %d doesn't have valid btf\n", tgt_fd);
                goto out;
        }
 
+       btf = btf__load_from_kernel_by_id(info_linear->info.btf_id);
+       if (libbpf_get_error(btf)) {
+               pr_debug("failed to load btf for prog FD %d\n", tgt_fd);
+               goto out;
+       }
+
        func_info = u64_to_ptr(info_linear->info.func_info);
        t = btf__type_by_id(btf, func_info[0].type_id);
        if (!t) {
index 68e415f4d33cd265b7d48c7f4cf9a98b54f5149e..649f87382c8d8717f78d795a4d500b5d286d0968 100644 (file)
@@ -4350,7 +4350,8 @@ static void do_test_file(unsigned int test_num)
                goto done;
        }
 
-       err = btf__get_from_id(info.btf_id, &btf);
+       btf = btf__load_from_kernel_by_id(info.btf_id);
+       err = libbpf_get_error(btf);
        if (CHECK(err, "cannot get btf from kernel, err: %d", err))
                goto done;