mbox series

[bpf-next,0/2] libbpf: Support uniform BTF-defined key/value specification across all BPF maps

Message ID 20210930161456.3444544-1-hengqi.chen@gmail.com (mailing list archive)
Headers show
Series libbpf: Support uniform BTF-defined key/value specification across all BPF maps | expand

Message

Hengqi Chen Sept. 30, 2021, 4:14 p.m. UTC
Currently a bunch of (usually pretty specialized) BPF maps do not support
specifying BTF types for they key and value. For such maps, specifying
their definition like this:

  struct {
      __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
      __type(key, int);
      __type(value, int);
  } my_perf_buf SEC(".maps");

Would actually produce warnings about retrying BPF map creation without BTF.
Users are forced to know such nuances and use __uint(key_size, 4) instead.
This is non-uniform, annoying, and inconvenient.

This patch set teaches libbpf to recognize those specialized maps and removes
BTF type IDs when creating BPF map. Also, update existing BPF selftests to
exericse this change.

Hengqi Chen (2):
  libbpf: Support uniform BTF-defined key/value specification across all
    BPF maps
  selftests/bpf: Use BTF-defined key/value for map definitions

 tools/lib/bpf/libbpf.c                        | 24 +++++++++++++++++++
 tools/testing/selftests/bpf/progs/kfree_skb.c |  4 ++--
 .../selftests/bpf/progs/perf_event_stackmap.c |  4 ++--
 .../bpf/progs/sockmap_verdict_prog.c          | 12 +++++-----
 .../selftests/bpf/progs/test_btf_map_in_map.c | 14 +++++------
 .../selftests/bpf/progs/test_map_in_map.c     | 10 ++++----
 .../bpf/progs/test_map_in_map_invalid.c       |  2 +-
 .../bpf/progs/test_pe_preserve_elems.c        |  8 +++----
 .../selftests/bpf/progs/test_perf_buffer.c    |  4 ++--
 .../bpf/progs/test_select_reuseport_kern.c    |  4 ++--
 .../bpf/progs/test_stacktrace_build_id.c      |  4 ++--
 .../selftests/bpf/progs/test_stacktrace_map.c |  4 ++--
 .../selftests/bpf/progs/test_tcpnotify_kern.c |  4 ++--
 .../selftests/bpf/progs/test_xdp_bpf2bpf.c    |  4 ++--
 14 files changed, 62 insertions(+), 40 deletions(-)

--
2.30.2

Comments

Andrii Nakryiko Oct. 1, 2021, 10:35 p.m. UTC | #1
On Thu, Sep 30, 2021 at 9:15 AM Hengqi Chen <hengqi.chen@gmail.com> wrote:
>
> Currently a bunch of (usually pretty specialized) BPF maps do not support
> specifying BTF types for they key and value. For such maps, specifying
> their definition like this:
>
>   struct {
>       __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
>       __type(key, int);
>       __type(value, int);
>   } my_perf_buf SEC(".maps");
>
> Would actually produce warnings about retrying BPF map creation without BTF.
> Users are forced to know such nuances and use __uint(key_size, 4) instead.
> This is non-uniform, annoying, and inconvenient.
>
> This patch set teaches libbpf to recognize those specialized maps and removes
> BTF type IDs when creating BPF map. Also, update existing BPF selftests to
> exericse this change.
>
> Hengqi Chen (2):
>   libbpf: Support uniform BTF-defined key/value specification across all
>     BPF maps
>   selftests/bpf: Use BTF-defined key/value for map definitions
>
>  tools/lib/bpf/libbpf.c                        | 24 +++++++++++++++++++
>  tools/testing/selftests/bpf/progs/kfree_skb.c |  4 ++--
>  .../selftests/bpf/progs/perf_event_stackmap.c |  4 ++--
>  .../bpf/progs/sockmap_verdict_prog.c          | 12 +++++-----
>  .../selftests/bpf/progs/test_btf_map_in_map.c | 14 +++++------
>  .../selftests/bpf/progs/test_map_in_map.c     | 10 ++++----
>  .../bpf/progs/test_map_in_map_invalid.c       |  2 +-
>  .../bpf/progs/test_pe_preserve_elems.c        |  8 +++----
>  .../selftests/bpf/progs/test_perf_buffer.c    |  4 ++--
>  .../bpf/progs/test_select_reuseport_kern.c    |  4 ++--
>  .../bpf/progs/test_stacktrace_build_id.c      |  4 ++--
>  .../selftests/bpf/progs/test_stacktrace_map.c |  4 ++--
>  .../selftests/bpf/progs/test_tcpnotify_kern.c |  4 ++--
>  .../selftests/bpf/progs/test_xdp_bpf2bpf.c    |  4 ++--
>  14 files changed, 62 insertions(+), 40 deletions(-)
>
> --
> 2.30.2

Looks good. Applied to bpf-next, thanks.