On Wed, May 6, 2020 at 10:39 PM Yonghong Song <yhs@xxxxxx> wrote: > > A new bpf command BPF_ITER_CREATE is added. > > The anonymous bpf iterator is seq_file based. > The seq_file private data are referenced by targets. > The bpf_iter infrastructure allocated additional space > at seq_file->private before the space used by targets > to store some meta data, e.g., > prog: prog to run > session_id: an unique id for each opened seq_file > seq_num: how many times bpf programs are queried in this session > done_stop: an internal state to decide whether bpf program > should be called in seq_ops->stop() or not > > The seq_num will start from 0 for valid objects. > The bpf program may see the same seq_num more than once if > - seq_file buffer overflow happens and the same object > is retried by bpf_seq_read(), or > - the bpf program explicitly requests a retry of the > same object > > Since module is not supported for bpf_iter, all target > registeration happens at __init time, so there is no > need to change bpf_iter_unreg_target() as it is used > mostly in error path of the init function at which time > no bpf iterators have been created yet. > > Signed-off-by: Yonghong Song <yhs@xxxxxx> > --- LGTM. Acked-by: Andrii Nakryiko <andriin@xxxxxx> > include/linux/bpf.h | 1 + > include/uapi/linux/bpf.h | 6 ++ > kernel/bpf/bpf_iter.c | 129 +++++++++++++++++++++++++++++++++ > kernel/bpf/syscall.c | 26 +++++++ > tools/include/uapi/linux/bpf.h | 6 ++ > 5 files changed, 168 insertions(+) > [...]