[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAPhsuW4UGQ1MRzmA5YLkQ_cem70BvNLQXimXjVVej46+TZ+=Hw@mail.gmail.com>
Date: Wed, 29 May 2019 10:23:51 -0700
From: Song Liu <liu.song.a23@...il.com>
To: Andrii Nakryiko <andriin@...com>
Cc: Andrii Nakryiko <andrii.nakryiko@...il.com>,
Networking <netdev@...r.kernel.org>, bpf <bpf@...r.kernel.org>,
Alexei Starovoitov <ast@...com>,
Daniel Borkmann <daniel@...earbox.net>,
Kernel Team <kernel-team@...com>
Subject: Re: [PATCH bpf-next 6/9] libbpf: use negative fd to specify missing BTF
On Tue, May 28, 2019 at 6:14 PM Andrii Nakryiko <andriin@...com> wrote:
>
> 0 is a valid FD, so it's better to initialize it to -1, as is done in
> other places. Also, technically, BTF type ID 0 is valid (it's a VOID
> type), so it's more reliable to check btf_fd, instead of
> btf_key_type_id, to determine if there is any BTF associated with a map.
>
> Signed-off-by: Andrii Nakryiko <andriin@...com>
Acked-by: Song Liu <songliubraving@...com>
> ---
> tools/lib/bpf/libbpf.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> index 9c45856e7fd6..292ea9a2dc3d 100644
> --- a/tools/lib/bpf/libbpf.c
> +++ b/tools/lib/bpf/libbpf.c
> @@ -1751,7 +1751,7 @@ bpf_object__create_maps(struct bpf_object *obj)
> create_attr.key_size = def->key_size;
> create_attr.value_size = def->value_size;
> create_attr.max_entries = def->max_entries;
> - create_attr.btf_fd = 0;
> + create_attr.btf_fd = -1;
> create_attr.btf_key_type_id = 0;
> create_attr.btf_value_type_id = 0;
> if (bpf_map_type__is_map_in_map(def->type) &&
> @@ -1765,11 +1765,11 @@ bpf_object__create_maps(struct bpf_object *obj)
> }
>
> *pfd = bpf_create_map_xattr(&create_attr);
> - if (*pfd < 0 && create_attr.btf_key_type_id) {
> + if (*pfd < 0 && create_attr.btf_fd >= 0) {
> cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
> pr_warning("Error in bpf_create_map_xattr(%s):%s(%d). Retrying without BTF.\n",
> map->name, cp, errno);
> - create_attr.btf_fd = 0;
> + create_attr.btf_fd = -1;
> create_attr.btf_key_type_id = 0;
> create_attr.btf_value_type_id = 0;
> map->btf_key_type_id = 0;
> @@ -2053,6 +2053,9 @@ load_program(struct bpf_program *prog, struct bpf_insn *insns, int insns_cnt,
> char *log_buf;
> int ret;
>
> + if (!insns || !insns_cnt)
> + return -EINVAL;
> +
> memset(&load_attr, 0, sizeof(struct bpf_load_program_attr));
> load_attr.prog_type = prog->type;
> load_attr.expected_attach_type = prog->expected_attach_type;
> @@ -2063,7 +2066,7 @@ load_program(struct bpf_program *prog, struct bpf_insn *insns, int insns_cnt,
> load_attr.license = license;
> load_attr.kern_version = kern_version;
> load_attr.prog_ifindex = prog->prog_ifindex;
> - load_attr.prog_btf_fd = prog->btf_fd >= 0 ? prog->btf_fd : 0;
> + load_attr.prog_btf_fd = prog->btf_fd;
> load_attr.func_info = prog->func_info;
> load_attr.func_info_rec_size = prog->func_info_rec_size;
> load_attr.func_info_cnt = prog->func_info_cnt;
> @@ -2072,8 +2075,6 @@ load_program(struct bpf_program *prog, struct bpf_insn *insns, int insns_cnt,
> load_attr.line_info_cnt = prog->line_info_cnt;
> load_attr.log_level = prog->log_level;
> load_attr.prog_flags = prog->prog_flags;
> - if (!load_attr.insns || !load_attr.insns_cnt)
> - return -EINVAL;
>
> retry_load:
> log_buf = malloc(log_buf_size);
> --
> 2.17.1
>
Powered by blists - more mailing lists