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; - toggle autoload for referenced struct_ops programs when autocreate flag of struct_ops maps is toggled. 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 #7 ties autocreate and autoload flags for struct_ops maps and programs, I'm curious if people find such bundling useful and in line with other libbpf APIs. Eduard Zingerman (8): 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: 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: tests for struct_ops autoload/autocreate toggling tools/lib/bpf/libbpf.c | 105 ++++++++++---- .../selftests/bpf/bpf_testmod/bpf_testmod.c | 25 ++++ .../selftests/bpf/bpf_testmod/bpf_testmod.h | 4 + .../selftests/bpf/prog_tests/bad_struct_ops.c | 42 ++++++ .../bpf/prog_tests/struct_ops_autocreate.c | 136 ++++++++++++++++++ .../bpf/prog_tests/test_struct_ops_module.c | 32 +++-- .../selftests/bpf/progs/bad_struct_ops.c | 17 +++ .../bpf/progs/struct_ops_autocreate.c | 42 ++++++ .../selftests/bpf/progs/struct_ops_module.c | 21 ++- 9 files changed, 383 insertions(+), 41 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/struct_ops_autocreate.c -- 2.43.0