libbpf: type suffixes and autocreate flag for struct_ops maps
Status from this message: This series was applied to bpf/bpf-next.git (master)
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v4 Latest15 patches 1 replyApplied 15/15
- v315 patches 23 repliesSuperseded
- v215 patches 1 replySuperseded
Earlier versions · 1
| Version | Posted | Patches | Replies | Status |
|---|---|---|---|---|
| v1 | 8 patches | 52 replies | Superseded |
Changelog from the cover letter
- v3 [3] -> v4:
- changes for multiple styling suggestions from Andrii;
- patch #5: libbpf log capture now happens for LIBBPF_INFO and LIBBPF_WARN messages and does not depend on verbosity flags (Andrii);
- patch #6: fixed runtime crash caused by conflict with newly added
Patches in v4 All 15 applied
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/15 | libbpf: allow version suffixes (___smth) for struct_ops typestools/ | +5 | 0 replies | Applied |
| 2/15 | libbpf: tie struct_ops programs to kernel BTF ids, not to local idstools/ | +26 | 0 replies | Applied |
| 3/15 | libbpf: honor autocreate flag for struct_ops mapstools/ | +15 | 0 replies | Applied |
| 4/15 | selftests/bpf: test struct_ops map definition with type suffixtools/ tools/ tools/ | +46 | 0 replies | Applied |
| 5/15 | selftests/bpf: utility functions to capture libbpf log in test_progstools/ tools/ | +62 | 0 replies | Applied |
| 6/15 | selftests/bpf: bad_struct_ops testtools/ tools/ tools/ +1 more | +88 | 0 replies | Applied |
| 7/15 | selftests/bpf: test autocreate behavior for struct_ops mapstools/ tools/ | +118 | 0 replies | Applied |
| 8/15 | libbpf: sync progs autoload with maps autocreate for struct_ops mapstools/ | +43 | 0 replies | Applied |
| 9/15 | selftests/bpf: verify struct_ops autoload/autocreate synctools/ tools/ tools/ +1 more | +125 | 0 replies | Applied |
| 10/15 | libbpf: replace elf_state->st_ops_* fields with SEC_ST_OPS sec_typetools/ | +32 | 0 replies | Applied |
| 11/15 | libbpf: struct_ops in SEC("?.struct_ops") / SEC("?.struct_ops.link")tools/ | +14 | 0 replies | Applied |
| 12/15 | libbpf: rewrite btf datasec names starting from '?'tools/ tools/ tools/ | +41 | 0 replies | Applied |
| 13/15 | selftests/bpf: test case for SEC("?.struct_ops")tools/ tools/ | +56 | 0 replies | Applied |
| 14/15 | bpf: allow all printable characters in BTF DATASEC nameskernel/ | +15 | 1 reply | Applied |
| 15/15 | selftests/bpf: test cases for '?' in BTF namestools/ | +29 | 0 replies | Applied |
Reviews trailers per patch
6 of 15 patches have a Reviewed-by or Acked-by.
| Patch | David Vernet | Andrii Nakryiko |
|---|---|---|
| 1/15 | A-b | A-b |
| 2/15 | A-b | |
| 3/15 | A-b | |
| 4/15 | A-b | |
| 5/15 | ||
| 6/15 | A-b | |
| 7/15 | ||
| 8/15 | ||
| 9/15 | ||
| 10/15 | A-b | |
| 11/15 | ||
| 12/15 | ||
| 13/15 | ||
| 14/15 | ||
| 15/15 |
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.
Cover letter [PATCH bpf-next v4 00/15] libbpf: type suffixes and autocreate flag for struct_ops maps
Tweak struct_ops related APIs to allow the following features:
- specify version suffixes for stuct_ops map types;
- share same BPF program between several map definitions with different local BTF types, assuming only maps with same kernel BTF type would be selected for load;
- toggle autocreate flag for struct_ops maps;
- automatically toggle autoload for struct_ops programs referenced from struct_ops maps, depending on autocreate status of the corresponding map;
- use SEC("?.struct_ops") and SEC("?.struct_ops.link")
to define struct_ops maps with autocreate == false after object open.
This would allow loading programs like below:
SEC("struct_ops/foo") int BPF_PROG(foo) { ... }
SEC("struct_ops/bar") int BPF_PROG(bar) { ... }
struct bpf_testmod_ops___v1 {
int (*foo)(void);
};
struct bpf_testmod_ops___v2 {
int (*foo)(void);
int (*bar)(void);
};
/* Assume kernel type name to be 'test_ops' */
SEC(".struct_ops.link")
struct test_ops___v1 map_v1 = {
/* Program 'foo' shared by maps with
* different local BTF type
*/
.foo = (void *)foo
};
SEC(".struct_ops.link")
struct test_ops___v2 map_v2 = {
.foo = (void *)foo,
.bar = (void *)bar
};Assuming the following tweaks are done before loading:
/* to load v1 */
bpf_map__set_autocreate(skel->maps.map_v1, true);
bpf_map__set_autocreate(skel->maps.map_v2, false);
/* to load v2 */
bpf_map__set_autocreate(skel->maps.map_v1, false);
bpf_map__set_autocreate(skel->maps.map_v2, true);Patch #8 ties autocreate and autoload flags for struct_ops maps and programs.
Changelog:
- v3 [3] -> v4:
- changes for multiple styling suggestions from Andrii;
- patch #5: libbpf log capture now happens for LIBBPF_INFO and LIBBPF_WARN messages and does not depend on verbosity flags (Andrii);
- patch #6: fixed runtime crash caused by conflict with newly added
test case struct_ops_multi_pages;
- patch #7: fixed free of possibly uninitialized pointer (Daniel)
- patch #8: simpler algorithm to detect which programs to autoload
(Andrii);
- patch #9: added assertions for autoload flag after object load
(Andrii);
- patch #12: DATASEC name rewrite in libbpf is now done inplace, no
new strings added to BTF (Andrii); - patch #14: allow any printable characters in DATASEC names when kernel validates BTF (Andrii)
- v2 [2] -> v3:
- moved patch #8 logic to be fully done on load
(requested by Andrii in offlist discussion);
- in patch #9 added test case for shadow vars and autocreate/autoload interaction.
- v1 [1] -> v2:
- fixed memory leak in patch #1 (Kui-Feng);
- improved error messages in patch #2 (Martin, Andrii);
- in bad_struct_ops selftest from patch #6 added .test_2
map member setup (David);
- added utility functions to capture libbpf log from selftests (David)
- in selftests replaced usage of ...__open_and_load by separate
calls to ..._open() and ..._load() (Andrii);
- removed serial_... in selftest definitions (Andrii);
- improved comments in selftest struct_ops_autocreate
from patch #7 (David);
- removed autoload toggling logic incompatible with shadow variables
from bpf_map__set_autocreate(), instead struct_ops programs
autoload property is computed at struct_ops maps load phase,
see patch #8 (Kui-Feng, Martin, Andrii);
- added support for SEC("?.struct_ops") and SEC("?.struct_ops.link")
(Andrii).[1] https://lore.kernel.org/bpf/[email protected]/
[2] https://lore.kernel.org/bpf/[email protected]/
[3] https://lore.kernel.org/bpf/[email protected]/
Eduard Zingerman (15):
libbpf: allow version suffixes (___smth) for struct_ops types
libbpf: tie struct_ops programs to kernel BTF ids, not to local ids
libbpf: honor autocreate flag for struct_ops maps selftests/bpf: test struct_ops map definition with type suffix selftests/bpf: utility functions to capture libbpf log in test_progs selftests/bpf: bad_struct_ops test
selftests/bpf: test autocreate behavior for struct_ops maps
libbpf: sync progs autoload with maps autocreate for struct_ops maps selftests/bpf: verify struct_ops autoload/autocreate sync
libbpf: replace elf_state->st_ops_* fields with SEC_ST_OPS sec_type
libbpf: struct_ops in SEC("?.struct_ops") / SEC("?.struct_ops.link")
libbpf: rewrite btf datasec names starting from '?' selftests/bpf: test case for SEC("?.struct_ops")
bpf: allow all printable characters in BTF DATASEC names selftests/bpf: test cases for '?' in BTF names
kernel/bpf/btf.c | 16 +- tools/lib/bpf/features.c | 22 ++ tools/lib/bpf/libbpf.c | 209 +++++++++++++----- tools/lib/bpf/libbpf_internal.h | 2 + .../selftests/bpf/bpf_testmod/bpf_testmod.c | 26 +++ .../selftests/bpf/bpf_testmod/bpf_testmod.h | 4 + .../selftests/bpf/prog_tests/bad_struct_ops.c | 67 ++++++ tools/testing/selftests/bpf/prog_tests/btf.c | 29 +++ .../bpf/prog_tests/struct_ops_autocreate.c | 159 +++++++++++++ .../bpf/prog_tests/test_struct_ops_module.c | 33 ++- .../selftests/bpf/progs/bad_struct_ops.c | 25 +++ .../selftests/bpf/progs/bad_struct_ops2.c | 14 ++ .../bpf/progs/struct_ops_autocreate.c | 52 +++++ .../bpf/progs/struct_ops_autocreate2.c | 32 +++ .../selftests/bpf/progs/struct_ops_module.c | 21 +- tools/testing/selftests/bpf/test_progs.c | 59 +++++ tools/testing/selftests/bpf/test_progs.h | 3 + 17 files changed, 704 insertions(+), 69 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/bad_struct_ops.c create mode 100644 tools/testing/selftests/bpf/prog_tests/struct_ops_autocreate.c create mode 100644 tools/testing/selftests/bpf/progs/bad_struct_ops.c create mode 100644 tools/testing/selftests/bpf/progs/bad_struct_ops2.c create mode 100644 tools/testing/selftests/bpf/progs/struct_ops_autocreate.c create mode 100644 tools/testing/selftests/bpf/progs/struct_ops_autocreate2.c
Signature · 1 line
2.43.0