On Tue, 2024-01-02 at 11:00 -0800, Andrii Nakryiko wrote: > Support __arg_ctx global function argument tag semantics even on older kernels > that don't natively support it through btf_decl_tag("arg:ctx"). > > Patch #1 does a bunch of internal renaming to make internal function naming > consistent. We were doing it lazily up until now, but mixing single and double > underscored names are confusing, so let's bite a bullet and get it over the > finish line in one go. > > Patches #3-#7 are preparatory work to allow to postpone BTF loading into the > kernel until after all the BPF program relocations (including global func > appending to main programs) are done. Patch #5 is perhaps the most important > and establishes pre-created stable placeholder FDs, so that relocations can > embed valid map FDs into ldimm64 instructions. > > Once BTF is done after relocation, what's left is to adjust BTF information to > have each main program's copy of each used global subprog to point to its own > adjusted FUNC -> FUNC_PROTO type chain (if they use __arg_ctx) in such a way > as to satisfy type expectations of BPF verifier regarding the PTR_TO_CTX > argument definition. See patch #8 for details. > > Patch #9 adds few more __arg_ctx use cases (edge cases like multiple arguments > having __arg_ctx, etc) to test_global_func_ctx_args.c, to make it simple to > validate that this logic indeed works on old kernels. It does. I've read through the patch-set and it seems to be fine, as far as my (limited) understanding of the code base goes. Left a few nitpicks. [...]