Received: by 2002:a05:7412:2a8c:b0:e2:908c:2ebd with SMTP id u12csp3079905rdh; Thu, 28 Sep 2023 01:46:38 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHZrS+MbVA3gyhYDO7lwjWnGt6g+FYv4k0O7nbq5Dhc82qe9mye6NvEO3h45+wedSAJ9Ujg X-Received: by 2002:a25:4e87:0:b0:d81:8507:dc51 with SMTP id c129-20020a254e87000000b00d818507dc51mr490657ybb.17.1695890798445; Thu, 28 Sep 2023 01:46:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695890798; cv=none; d=google.com; s=arc-20160816; b=Mhi38OvVffd1xdt01Mo1ON6Dsn3N3Yk3dRq2e6/TmybmNsF+JKIEdFUzpGm79DJX2w TEniID5lBLNyACK5yhkVTlWh94FcVsj6SR1UEIlJ7Wf5egNrFiFwpzg0orIOuIJxzHSL EjayddHuM+Qt0JO50CyC9ad/ALFwPQCj5AAnHNNPW+xroJ7YNzTlisE968WPcPOe+/vk bJfbRkDwbqHACEcAEh65rdldsys0JFaOCcwy9yvDmB1KnPK73PAIZ7kxjSg1XPd+hoNn fuh9I01pvN6oI30jhN9/TpuIFy+2Of/bQGNIgVrak9tY4sgHzxyndiIJ7BXP2s0Aroie i2Fg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=vP4F85bbzFRNqjMlm7kZPQ+nNsT3kjeP+jCG/TYrq88=; fh=luN1T+TZmJdWrv2MwLqOcKf0btUR/zj1LntAQkciNa8=; b=xCYpxmkGuCn8g/jpCdl9XCKqcUxuVCxc01P9rBP99AbF1fYTA39M5OptSiw6Pu9iEH Ag/9RkLQIuFVnbpMGLLW0H44XRhFLjo70pJfkQevhiQu1n0mTMnML4epnhdoY/B/xdmY gZ0rKi0kln+Zvkrh9jPHZcZp58lLSzTqJ5FQ3HzDtNcL58BlfeMO5xl9WqPJ50nNKO4/ 3G7CXizRkK6G9KHH1ScIwZjy+vaZMNASY1BRv8B8av3OzZI3N5I0fdXptMsh1E6lsewA co1Nj6KqlORBe70b6BgjrRHYX5DAjg7DKXsV3Q8DKaf5XegnXURmiHAY8fE+GchhizKe vpUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=fYmmKUjP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id v190-20020a6389c7000000b00578e6f108c6si18797041pgd.173.2023.09.28.01.46.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 01:46:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=fYmmKUjP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id B4B9D80D7001; Wed, 27 Sep 2023 16:24:49 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229493AbjI0XYh (ORCPT + 99 others); Wed, 27 Sep 2023 19:24:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43156 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229464AbjI0XYh (ORCPT ); Wed, 27 Sep 2023 19:24:37 -0400 Received: from mail-ej1-x629.google.com (mail-ej1-x629.google.com [IPv6:2a00:1450:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A17D2F4; Wed, 27 Sep 2023 16:24:35 -0700 (PDT) Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-9b2b53e17feso287939866b.3; Wed, 27 Sep 2023 16:24:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695857074; x=1696461874; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=vP4F85bbzFRNqjMlm7kZPQ+nNsT3kjeP+jCG/TYrq88=; b=fYmmKUjP/nq2jxphtDeohGJ2FsjtZNI7sojMyYd/0iobLIrGfdNxibVzOANkCHNLqF 3PjsjnHjbx+qd3xXvQGXmXrzTVBZQCcgXAHFmmOX9GbWhBQcS0g1rArKPiEwNfBLQe5p AaUVoHqWWzyiXduQ+/9Klyiwp1EadC/N+f5wHRGxXzCYUuSxMOFbWaQv9zThh1qd8Hlt Vsx3B7VM/+ChgGs3HCgca4+qt5eLwyQeR7PNhyixYW6o0wQKudvUqO3voCyOHyX6zjDN aLSKysrZH0PDe1uM1XjL5rmysrViAEtxjow1cgD3FvFlTuSQpfTAVGMJm4osnCjAq9/T 1lCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695857074; x=1696461874; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vP4F85bbzFRNqjMlm7kZPQ+nNsT3kjeP+jCG/TYrq88=; b=SNXJgHc3f7g16EdjRbBRhuS8vTQRiTU79KYq4YSpPXubJyQAwHiYV6F87luzGCVhhz jZ78jIkkBW6Jt274CmnZjnY8Gm7U1FgXcePZCTSSCZ5xjcr4wicLX7N3dtlTrWLwZwNe kW0s3WlfBZo/7/gsUFr/P2uHUC5w9dNuq1v5yP65G9mblp/zUzF0xXfzC1dDbOP7YbOK DoG/+4MQdo9wLK8Uu5YxqwUNJazOEvSnt0/KuOWEpLTHAkGSfnoiaAeJtmocKSNiGSSH F07ABQMzCThGhbcGFtJGcrBdTobjhrlxUM7PNhOmW1FnNv2jigjYOyyWI9ciOZkFdprO zxBQ== X-Gm-Message-State: AOJu0Ywn4T8DnyJDOLoKI0w0CUt5wZd1csfb+40S/7eEmemicilJ8tnq Q8nMLKL+fIapGeTOAX+4y0YOKHNvyCpHMGTWnZC/S4MKkKQ= X-Received: by 2002:a17:907:75ef:b0:9ae:594d:d3fc with SMTP id jz15-20020a17090775ef00b009ae594dd3fcmr2658272ejc.17.1695857073839; Wed, 27 Sep 2023 16:24:33 -0700 (PDT) MIME-Version: 1.0 References: <20230925105552.817513-1-zhouchuyi@bytedance.com> <20230925105552.817513-5-zhouchuyi@bytedance.com> In-Reply-To: <20230925105552.817513-5-zhouchuyi@bytedance.com> From: Andrii Nakryiko Date: Wed, 27 Sep 2023 16:24:22 -0700 Message-ID: Subject: Re: [PATCH bpf-next v3 4/7] bpf: Introduce css open-coded iterator kfuncs To: Chuyi Zhou Cc: bpf@vger.kernel.org, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@kernel.org, tj@kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Wed, 27 Sep 2023 16:24:50 -0700 (PDT) On Mon, Sep 25, 2023 at 3:56=E2=80=AFAM Chuyi Zhou wrote: > > This Patch adds kfuncs bpf_iter_css_{new,next,destroy} which allow > creation and manipulation of struct bpf_iter_css in open-coded iterator > style. These kfuncs actually wrapps css_next_descendant_{pre, post}. > css_iter can be used to: > > 1) iterating a sepcific cgroup tree with pre/post/up order > > 2) iterating cgroup_subsystem in BPF Prog, like > for_each_mem_cgroup_tree/cpuset_for_each_descendant_pre in kernel. > > The API design is consistent with cgroup_iter. bpf_iter_css_new accepts > parameters defining iteration order and starting css. Here we also reuse > BPF_CGROUP_ITER_DESCENDANTS_PRE, BPF_CGROUP_ITER_DESCENDANTS_POST, > BPF_CGROUP_ITER_ANCESTORS_UP enums. > > Signed-off-by: Chuyi Zhou > --- > kernel/bpf/cgroup_iter.c | 57 +++++++++++++++++++ > kernel/bpf/helpers.c | 3 + > .../testing/selftests/bpf/bpf_experimental.h | 6 ++ > 3 files changed, 66 insertions(+) > > diff --git a/kernel/bpf/cgroup_iter.c b/kernel/bpf/cgroup_iter.c > index 810378f04fbc..ebc3d9471f52 100644 > --- a/kernel/bpf/cgroup_iter.c > +++ b/kernel/bpf/cgroup_iter.c > @@ -294,3 +294,60 @@ static int __init bpf_cgroup_iter_init(void) > } > > late_initcall(bpf_cgroup_iter_init); > + > +struct bpf_iter_css { > + __u64 __opaque[2]; > + __u32 __opaque_int[1]; > +} __attribute__((aligned(8))); > + same as before, __opaque[3] only > +struct bpf_iter_css_kern { > + struct cgroup_subsys_state *start; > + struct cgroup_subsys_state *pos; > + int order; > +} __attribute__((aligned(8))); > + > +__bpf_kfunc int bpf_iter_css_new(struct bpf_iter_css *it, > + struct cgroup_subsys_state *start, enum bpf_cgroup_iter_o= rder order) Similarly, I wonder if we should go for a more generic "flags" argument? > +{ > + struct bpf_iter_css_kern *kit =3D (void *)it; empty line > + kit->start =3D NULL; > + BUILD_BUG_ON(sizeof(struct bpf_iter_css_kern) !=3D sizeof(struct = bpf_iter_css)); > + BUILD_BUG_ON(__alignof__(struct bpf_iter_css_kern) !=3D __alignof= __(struct bpf_iter_css)); please move this up before kit->start assignment, and separate by empty lin= es > + switch (order) { > + case BPF_CGROUP_ITER_DESCENDANTS_PRE: > + case BPF_CGROUP_ITER_DESCENDANTS_POST: > + case BPF_CGROUP_ITER_ANCESTORS_UP: > + break; > + default: > + return -EINVAL; > + } > + > + kit->start =3D start; > + kit->pos =3D NULL; > + kit->order =3D order; > + return 0; > +} > + > +__bpf_kfunc struct cgroup_subsys_state *bpf_iter_css_next(struct bpf_ite= r_css *it) > +{ > + struct bpf_iter_css_kern *kit =3D (void *)it; empty line > + if (!kit->start) > + return NULL; > + > + switch (kit->order) { > + case BPF_CGROUP_ITER_DESCENDANTS_PRE: > + kit->pos =3D css_next_descendant_pre(kit->pos, kit->start= ); > + break; > + case BPF_CGROUP_ITER_DESCENDANTS_POST: > + kit->pos =3D css_next_descendant_post(kit->pos, kit->star= t); > + break; > + default: we know it's BPF_CGROUP_ITER_ANCESTORS_UP, so why not have that here explic= itly? > + kit->pos =3D kit->pos ? kit->pos->parent : kit->start; > + } > + > + return kit->pos; wouldn't this implementation never return the "start" css? is that intentio= nal? > +} > + > +__bpf_kfunc void bpf_iter_css_destroy(struct bpf_iter_css *it) > +{ > +} > diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c > index 556262c27a75..9c3af36249a2 100644 > --- a/kernel/bpf/helpers.c > +++ b/kernel/bpf/helpers.c > @@ -2510,6 +2510,9 @@ BTF_ID_FLAGS(func, bpf_iter_css_task_destroy, KF_IT= ER_DESTROY) > BTF_ID_FLAGS(func, bpf_iter_task_new, KF_ITER_NEW | KF_TRUSTED_ARGS) > BTF_ID_FLAGS(func, bpf_iter_task_next, KF_ITER_NEXT | KF_RET_NULL) > BTF_ID_FLAGS(func, bpf_iter_task_destroy, KF_ITER_DESTROY) > +BTF_ID_FLAGS(func, bpf_iter_css_new, KF_ITER_NEW | KF_TRUSTED_ARGS) > +BTF_ID_FLAGS(func, bpf_iter_css_next, KF_ITER_NEXT | KF_RET_NULL) > +BTF_ID_FLAGS(func, bpf_iter_css_destroy, KF_ITER_DESTROY) > BTF_ID_FLAGS(func, bpf_dynptr_adjust) > BTF_ID_FLAGS(func, bpf_dynptr_is_null) > BTF_ID_FLAGS(func, bpf_dynptr_is_rdonly) > diff --git a/tools/testing/selftests/bpf/bpf_experimental.h b/tools/testi= ng/selftests/bpf/bpf_experimental.h > index d989775dbdb5..aa247d1d81d1 100644 > --- a/tools/testing/selftests/bpf/bpf_experimental.h > +++ b/tools/testing/selftests/bpf/bpf_experimental.h > @@ -174,4 +174,10 @@ extern int bpf_iter_task_new(struct bpf_iter_task *i= t, struct task_struct *task, > extern struct task_struct *bpf_iter_task_next(struct bpf_iter_task *it) = __weak __ksym; > extern void bpf_iter_task_destroy(struct bpf_iter_task *it) __weak __ksy= m; > > +struct bpf_iter_css; > +extern int bpf_iter_css_new(struct bpf_iter_css *it, > + struct cgroup_subsys_state *start, enum b= pf_cgroup_iter_order order) __weak __ksym; > +extern struct cgroup_subsys_state *bpf_iter_css_next(struct bpf_iter_css= *it) __weak __ksym; > +extern void bpf_iter_css_destroy(struct bpf_iter_css *it) __weak __ksym; > + > #endif > -- > 2.20.1 >