On Mon, Jan 20, 2020 at 4:54 PM Alexei Starovoitov <ast@xxxxxxxxxx> wrote: > > The last few month BPF community has been discussing an approach to call > chaining, since exiting bpt_tail_call() mechanism used in production XDP > programs has plenty of downsides. The outcome of these discussion was a > conclusion to implement dynamic re-linking of BPF programs. Where rootlet XDP > program attached to a netdevice can programmatically define a policy of > execution of other XDP programs. Such rootlet would be compiled as normal XDP > program and provide a number of placeholder global functions which later can be > replaced with future XDP programs. BPF trampoline, function by function > verification were building blocks towards that goal. The patch 1 is a final > building block. It introduces dynamic program extensions. A number of > improvements like more flexible function by function verification and better > libbpf api will be implemented in future patches. > > v1->v2: > - addressed Andrii's comments > - rebase > > Alexei Starovoitov (3): > bpf: Introduce dynamic program extensions > libbpf: Add support for program extensions > selftests/bpf: Add tests for program extensions > > include/linux/bpf.h | 10 +- > include/linux/bpf_types.h | 2 + > include/linux/btf.h | 5 + > include/uapi/linux/bpf.h | 1 + > kernel/bpf/btf.c | 152 +++++++++++++++++- > kernel/bpf/syscall.c | 15 +- > kernel/bpf/trampoline.c | 41 ++++- > kernel/bpf/verifier.c | 85 +++++++--- > tools/include/uapi/linux/bpf.h | 1 + > tools/lib/bpf/bpf.c | 3 +- > tools/lib/bpf/libbpf.c | 13 +- > tools/lib/bpf/libbpf.h | 2 + > tools/lib/bpf/libbpf.map | 2 + > tools/lib/bpf/libbpf_probes.c | 1 + > .../selftests/bpf/prog_tests/fexit_bpf2bpf.c | 20 ++- > .../selftests/bpf/progs/fexit_bpf2bpf.c | 57 +++++++ > .../selftests/bpf/progs/test_pkt_access.c | 8 +- > 17 files changed, 384 insertions(+), 34 deletions(-) > > -- > 2.23.0 > LGTM. For the series: Acked-by: Andrii Nakryiko <andriin@xxxxxx>