From: "Toke Høiland-Jørgensen" <toke@redhat.com>
To: Andrii Nakryiko <andriin@fb.com>,
bpf@vger.kernel.org, netdev@vger.kernel.org, ast@fb.com,
daniel@iogearbox.net
Cc: andrii.nakryiko@gmail.com, kernel-team@fb.com,
Andrii Nakryiko <andriin@fb.com>
Subject: Re: [PATCH v2 bpf-next 3/3] libbpf: add BTF-defined map-in-map support
Date: Tue, 28 Apr 2020 13:03:07 +0200 [thread overview]
Message-ID: <878sifx47o.fsf@toke.dk> (raw)
In-Reply-To: <20200428064140.122796-4-andriin@fb.com>
Andrii Nakryiko <andriin@fb.com> writes:
> As discussed at LPC 2019 ([0]), this patch brings (a quite belated) support
> for declarative BTF-defined map-in-map support in libbpf. It allows to define
> ARRAY_OF_MAPS and HASH_OF_MAPS BPF maps without any user-space initialization
> code involved.
>
> Additionally, it allows to initialize outer map's slots with references to
> respective inner maps at load time, also completely declaratively.
>
> Despite a weak type system of C, the way BTF-defined map-in-map definition
> works, it's actually quite hard to accidentally initialize outer map with
> incompatible inner maps. This being C, of course, it's still possible, but
> even that would be caught at load time and error returned with helpful debug
> log pointing exactly to the slot that failed to be initialized.
>
> As an example, here's a rather advanced HASH_OF_MAPS declaration and
> initialization example, filling slots #0 and #4 with two inner maps:
>
> #include <bpf/bpf_helpers.h>
>
> struct inner_map {
> __uint(type, BPF_MAP_TYPE_ARRAY);
> __uint(max_entries, 1);
> __type(key, int);
> __type(value, int);
> } inner_map1 SEC(".maps"),
> inner_map2 SEC(".maps");
>
> struct outer_hash {
> __uint(type, BPF_MAP_TYPE_HASH_OF_MAPS);
> __uint(max_entries, 5);
> __uint(key_size, sizeof(int));
> __inner(values, struct inner_map);
> } outer_hash SEC(".maps") = {
> .values = {
> [0] = &inner_map2,
> [4] = &inner_map1,
> },
> };
I like the syntax (well, to the extent you can 'like' C syntax and its
esoteric (ab)uses), and am only mildly horrified at what it takes to
achieve it ;)
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
next prev parent reply other threads:[~2020-04-28 11:03 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-28 6:41 [PATCH v2 bpf-next 0/3] Add BTF-defined map-in-map support to libbpf Andrii Nakryiko
2020-04-28 6:41 ` [PATCH v2 bpf-next 1/3] libbpf: refactor BTF-defined map definition parsing logic Andrii Nakryiko
2020-04-28 6:41 ` [PATCH v2 bpf-next 2/3] libbpf: refactor map creation logic and fix cleanup leak Andrii Nakryiko
2020-04-28 10:48 ` Toke Høiland-Jørgensen
2020-04-28 6:41 ` [PATCH v2 bpf-next 3/3] libbpf: add BTF-defined map-in-map support Andrii Nakryiko
2020-04-28 11:03 ` Toke Høiland-Jørgensen [this message]
2020-04-28 18:03 ` Alexei Starovoitov
2020-04-28 18:35 ` Andrii Nakryiko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878sifx47o.fsf@toke.dk \
--to=toke@redhat.com \
--cc=andrii.nakryiko@gmail.com \
--cc=andriin@fb.com \
--cc=ast@fb.com \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=kernel-team@fb.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.