On Thu, Jan 25, 2024 at 1:51 AM Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> wrote: > > On Wed, Jan 24, 2024 at 1:31 AM Yafang Shao <laoar.shao@xxxxxxxxx> wrote: > > > > On Wed, Jan 24, 2024 at 2:26 AM David Vernet <void@xxxxxxxxxxxxx> wrote: > > > > > > On Tue, Jan 23, 2024 at 11:27:14PM +0800, Yafang Shao wrote: > > > > Add three new kfuncs for bpf_iter_cpumask. > > > > - bpf_iter_cpumask_new > > > > KF_RCU is defined because the cpumask must be a RCU trusted pointer > > > > such as task->cpus_ptr. > > > > - bpf_iter_cpumask_next > > > > - bpf_iter_cpumask_destroy > > > > > > > > These new kfuncs facilitate the iteration of percpu data, such as > > > > runqueues, psi_cgroup_cpu, and more. > > > > > > > > Signed-off-by: Yafang Shao <laoar.shao@xxxxxxxxx> > > > > > > Thanks for working on this, this will be nice to have! > > > > > > > --- > > > > kernel/bpf/cpumask.c | 82 ++++++++++++++++++++++++++++++++++++++++++++ > > > > 1 file changed, 82 insertions(+) > > > > > > > > diff --git a/kernel/bpf/cpumask.c b/kernel/bpf/cpumask.c > > > > index 2e73533a3811..474072a235d6 100644 > > > > --- a/kernel/bpf/cpumask.c > > > > +++ b/kernel/bpf/cpumask.c > > > > @@ -422,6 +422,85 @@ __bpf_kfunc u32 bpf_cpumask_weight(const struct cpumask *cpumask) > > > > return cpumask_weight(cpumask); > > > > } > > > > > > > > +struct bpf_iter_cpumask { > > > > + __u64 __opaque[2]; > > > > +} __aligned(8); > > > > + > > > > +struct bpf_iter_cpumask_kern { > > > > + struct cpumask *mask; > > > > + int cpu; > > > > +} __aligned(8); > > > > > > Why do we need both of these if we're not going to put the opaque > > > iterator in UAPI? > > > > Good point! Will remove it. > > It aligns with the pattern seen in > > bpf_iter_{css,task,task_vma,task_css}_kern, suggesting that we should > > indeed eliminate them. > > > > It feels a bit cleaner to have API-oriented (despite being unstable > and coming from vmlinux.h) iter struct like bpf_iter_cpumask with just > "__opaque" field. And then having _kern variant with actual memory > layout. Technically _kern struct could grow smaller. > > I certainly wanted this split for bpf_iter_num as that one is more of > a general purpose and stable struct. It's less relevant for more > unstable iters here. Understood. Thanks for your explanation. -- Regards Yafang