mbox series

[bpf-next,v2,0/4] Introduce bpf_object__prepare

Message ID 20250303135752.158343-1-mykyta.yatsenko5@gmail.com (mailing list archive)
Headers show
Series Introduce bpf_object__prepare | expand

Message

Mykyta Yatsenko March 3, 2025, 1:57 p.m. UTC
From: Mykyta Yatsenko <yatsenko@meta.com>

We are introducing a new function in the libbpf API, bpf_object__prepare,
which provides more granular control over the process of loading a
bpf_object. bpf_object__prepare performs ELF processing, relocations,
prepares final state of BPF program instructions (accessible with
bpf_program__insns()), creates and potentially pins maps, and stops short
of loading BPF programs.

There are couple of anticipated usecases for this API:
* Use BPF token for freplace programs that might need to lookup BTF of
other programs (BPF token creation can't be moved to open step, as open
step is "no privilege assumption" step so that tools like bpftool can
generate skeleton, discover the structure of BPF object, etc).
* Stopping at prepare gives users finalized BPF program
instructions (with subprogs appended, everything relocated and
finalized, etc). And that property can be taken advantage of by
veristat (and similar tools) that might want to process one program at
a time, but would like to avoid relatively slow ELF parsing and
processing; and even BPF selftests itself (RUN_TESTS part of it at
least) would benefit from this by eliminating waste of re-processing
ELF many times.

Mykyta Yatsenko (4):
  libbpf: use map_is_created helper in map setters
  libbpf: introduce more granular state for bpf_object
  libbpf: split bpf object load into prepare/load
  selftests/bpf: add tests for bpf_object__prepare

 tools/lib/bpf/libbpf.c                        | 197 ++++++++++++------
 tools/lib/bpf/libbpf.h                        |  13 ++
 tools/lib/bpf/libbpf.map                      |   1 +
 .../selftests/bpf/prog_tests/prepare.c        |  99 +++++++++
 tools/testing/selftests/bpf/progs/prepare.c   |  28 +++
 5 files changed, 271 insertions(+), 67 deletions(-)
 create mode 100644 tools/testing/selftests/bpf/prog_tests/prepare.c
 create mode 100644 tools/testing/selftests/bpf/progs/prepare.c

Comments

patchwork-bot+netdevbpf@kernel.org March 3, 2025, 11:36 p.m. UTC | #1
Hello:

This series was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko <andrii@kernel.org>:

On Mon,  3 Mar 2025 13:57:48 +0000 you wrote:
> From: Mykyta Yatsenko <yatsenko@meta.com>
> 
> We are introducing a new function in the libbpf API, bpf_object__prepare,
> which provides more granular control over the process of loading a
> bpf_object. bpf_object__prepare performs ELF processing, relocations,
> prepares final state of BPF program instructions (accessible with
> bpf_program__insns()), creates and potentially pins maps, and stops short
> of loading BPF programs.
> 
> [...]

Here is the summary with links:
  - [bpf-next,v2,1/4] libbpf: use map_is_created helper in map setters
    https://git.kernel.org/bpf/bpf-next/c/7218ff1f322d
  - [bpf-next,v2,2/4] libbpf: introduce more granular state for bpf_object
    https://git.kernel.org/bpf/bpf-next/c/8ca8f6d1a2b4
  - [bpf-next,v2,3/4] libbpf: split bpf object load into prepare/load
    https://git.kernel.org/bpf/bpf-next/c/da755540c6f8
  - [bpf-next,v2,4/4] selftests/bpf: add tests for bpf_object__prepare
    https://git.kernel.org/bpf/bpf-next/c/68b61a823aab

You are awesome, thank you!