On Mon, Nov 29, 2021 at 2:39 PM Joanne Koong <joannekoong@xxxxxx> wrote: > > This patch adds the kernel-side and API changes for a new helper > function, bpf_loop: > > long bpf_loop(u32 nr_loops, void *callback_fn, void *callback_ctx, > u64 flags); > > where long (*callback_fn)(u32 index, void *ctx); > > bpf_loop invokes the "callback_fn" **nr_loops** times or until the > callback_fn returns 1. The callback_fn can only return 0 or 1, and > this is enforced by the verifier. The callback_fn index is zero-indexed. > > A few things to please note: > ~ The "u64 flags" parameter is currently unused but is included in > case a future use case for it arises. > ~ In the kernel-side implementation of bpf_loop (kernel/bpf/bpf_iter.c), > bpf_callback_t is used as the callback function cast. > ~ A program can have nested bpf_loop calls but the program must > still adhere to the verifier constraint of its stack depth (the stack depth > cannot exceed MAX_BPF_STACK)) > ~ Recursive callback_fns do not pass the verifier, due to the call stack > for these being too deep. > ~ The next patch will include the tests and benchmark > > Signed-off-by: Joanne Koong <joannekoong@xxxxxx> > --- LGTM. Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > include/linux/bpf.h | 1 + > include/uapi/linux/bpf.h | 25 ++++++++++ > kernel/bpf/bpf_iter.c | 35 ++++++++++++++ > kernel/bpf/helpers.c | 2 + > kernel/bpf/verifier.c | 88 +++++++++++++++++++++------------- > tools/include/uapi/linux/bpf.h | 25 ++++++++++ > 6 files changed, 142 insertions(+), 34 deletions(-) > [...]