On Mon, Aug 1, 2022 at 4:27 PM Kui-Feng Lee <kuifeng@xxxxxx> wrote: > > Allow creating an iterator that loops through resources of one task/thread. > > People could only create iterators to loop through all resources of > files, vma, and tasks in the system, even though they were interested > in only the resources of a specific task or process. Passing the > additional parameters, people can now create an iterator to go > through all resources or only the resources of a task. > > Signed-off-by: Kui-Feng Lee <kuifeng@xxxxxx> > --- > include/linux/bpf.h | 4 ++ > include/uapi/linux/bpf.h | 23 +++++++++ > kernel/bpf/task_iter.c | 93 ++++++++++++++++++++++++++-------- > tools/include/uapi/linux/bpf.h | 23 +++++++++ > 4 files changed, 121 insertions(+), 22 deletions(-) > > diff --git a/include/linux/bpf.h b/include/linux/bpf.h > index 11950029284f..3c26dbfc9cef 100644 > --- a/include/linux/bpf.h > +++ b/include/linux/bpf.h > @@ -1718,6 +1718,10 @@ int bpf_obj_get_user(const char __user *pathname, int flags); > > struct bpf_iter_aux_info { > struct bpf_map *map; > + struct { > + u32 tid; > + u8 type; > + } task; > }; > > typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *prog, > diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h > index ffcbf79a556b..ed5ba501609f 100644 > --- a/include/uapi/linux/bpf.h > +++ b/include/uapi/linux/bpf.h > @@ -87,10 +87,33 @@ struct bpf_cgroup_storage_key { > __u32 attach_type; /* program attach type (enum bpf_attach_type) */ > }; > > +enum bpf_task_iter_type { > + BPF_TASK_ITER_ALL = 0, > + BPF_TASK_ITER_TID, > +}; > + > union bpf_iter_link_info { > struct { > __u32 map_fd; > } map; > + /* > + * Parameters of task iterators. > + */ > + struct { > + __u32 pid_fd; > + /* > + * The type of the iterator. > + * > + * It can be one of enum bpf_task_iter_type. > + * > + * BPF_TASK_ITER_ALL (default) > + * The iterator iterates over resources of everyprocess. > + * > + * BPF_TASK_ITER_TID > + * You should also set *pid_fd* to iterate over one task. > + */ > + __u8 type; /* BPF_TASK_ITER_* */ __u8 might be a pain for future extensibility. big vs little endian will be another potential issue. Maybe use enum bpf_task_iter_type type; here and move the comment to enum def ? Or rename it to '__u32 flags;' ?