Received: by 2002:a05:7412:2a8c:b0:e2:908c:2ebd with SMTP id u12csp1878970rdh; Tue, 26 Sep 2023 06:23:06 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEDigh9K53V5RvQei/cZsylH5sXMaqCRWB7vs26lnXF0z/cf4xtiu8dYpifF0ozFRRK65cQ X-Received: by 2002:a17:903:1109:b0:1bb:d59d:8c57 with SMTP id n9-20020a170903110900b001bbd59d8c57mr8787755plh.18.1695734586201; Tue, 26 Sep 2023 06:23:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695734586; cv=none; d=google.com; s=arc-20160816; b=z1gubqLLfzXAf/Zg7BSNi3d4+scdOSsub20ENMUUfLik0c0IaYHuY04QeyJC3CdXu+ FqBctpx7GzDYcqo62+XveGSGeo6ujSErZJom2ZM+Div1foivpMVBKUOWWYpES1cTOs1E EaCFKYERcohYErqjNX6FN+mSrBWPA5mHtnnrSn8TpZb1umDPnr8N3c4r2BaN1oTdKWFU BHoq7UF2FvKejrjVgdrY79hK03AS3hlJWacjY0KKOdL55fVVdouKm/nRh6zsWUE/Rb/D NG1cZpXKiwlhsAAttPPu0e2VBBl5fhp0QDJZCc/vAnz5ejDyDw6p+LgA4E5sAZ4l+HpX 6l0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:references:subject:cc:to:from :message-id:date:content-transfer-encoding:mime-version :dkim-signature; bh=TKKOhDT113g4B1/0jGbnn983RDivZoHHBP43o0OdgsY=; fh=nOrggBTNhRh2QnG9zOkWFM4+aibiwiCfCrBZEO/sDBQ=; b=VkjpF9YXjHo7IuFl2Ndhp8QFKJZq4R+VJegkoUzXOwor0lPUHBzgU2OjSwQOwzv4ck ia9NY/8NcOYRiDMZa52ZEMsKjVE7DLWAdHePV/CmqEG8O1QYH7fDScxyUhuqzFEoMK69 hDmSrl60M+1QfckyOB6G1bDPY08yrldkp3D6jDRqLIolgHlBwI0k7F8OlaTHtbXeUEsp spVi6OKy8p7rXBijSvxNYMkQjAaFxlmLy9sSjVgFFVz+ZEBrLk5qQMfSQySos4PffTm0 60jyx/p7QXphlA/b+Jeu0pCFw3mJ11HFZgm7hXjIf4RXxmilpquHuwh12aqAOJdHFlZe mbxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Nzht4gYm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id be8-20020a170902aa0800b001bdd58f685fsi11648373plb.85.2023.09.26.06.23.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Sep 2023 06:23:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Nzht4gYm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id DDDF58022A88; Tue, 26 Sep 2023 06:10:44 -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 S234735AbjIZNKp (ORCPT + 99 others); Tue, 26 Sep 2023 09:10:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50160 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229604AbjIZNKo (ORCPT ); Tue, 26 Sep 2023 09:10:44 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0A36D10E; Tue, 26 Sep 2023 06:10:37 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CA60AC433C7; Tue, 26 Sep 2023 13:10:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1695733836; bh=GDQp7RRyC5swsgr+p465JJc4d2vBoN5WMysJHZ++naU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Nzht4gYm6auaMDpvFO3Q3sroRMOACCjpWaWumOcbekI+j6alECIBYEYDumT23Et3N VcAWkq2onCsdBltq8qAjOWtoblLW451bXVGKcmeflXYOS4++rDcEAhegAV4P/qreo5 3rJWLxleexp6I3PQgKYLczdoKI7Lrf7waVOheGzkn+DyHUfZBpPK1JmTGwo1mItGK9 qP2xvlvl/pWKckbiBrxBFdFvwuxykzhQnnZwOoh8gDT9jGfXNn9rLdUhhAgw8Eb/xt yIj22r2NsghGoKMQVB6OPYKF6rf1Wyq63s7A+C3y+06vSTwptNyQc1xuMuMbZrfpfY PaoFQzGv/ZPQg== Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Tue, 26 Sep 2023 16:10:30 +0300 Message-Id: From: "Jarkko Sakkinen" To: "Haitao Huang" , , , , , , , , , , , Cc: , , , , , , Subject: Re: [PATCH v5 01/18] cgroup/misc: Add per resource callbacks for CSS events X-Mailer: aerc 0.15.2 References: <20230923030657.16148-1-haitao.huang@linux.intel.com> <20230923030657.16148-2-haitao.huang@linux.intel.com> In-Reply-To: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,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]); Tue, 26 Sep 2023 06:10:45 -0700 (PDT) On Tue Sep 26, 2023 at 6:04 AM EEST, Haitao Huang wrote: > Hi Jarkko > > On Mon, 25 Sep 2023 12:09:21 -0500, Jarkko Sakkinen = =20 > wrote: > > > On Sat Sep 23, 2023 at 6:06 AM EEST, Haitao Huang wrote: > >> From: Kristen Carlson Accardi > >> > >> The misc cgroup controller (subsystem) currently does not perform > >> resource type specific action for Cgroups Subsystem State (CSS) events= : > >> the 'css_alloc' event when a cgroup is created and the 'css_free' even= t > >> when a cgroup is destroyed, or in event of user writing the max value = to > >> the misc.max file to set the usage limit of a specific resource > >> [admin-guide/cgroup-v2.rst, 5-9. Misc]. > >> > >> Define callbacks for those events and allow resource providers to > >> register the callbacks per resource type as needed. This will be > >> utilized later by the EPC misc cgroup support implemented in the SGX > >> driver: > >> - On css_alloc, allocate and initialize necessary structures for EPC > >> reclaiming, e.g., LRU list, work queue, etc. > >> - On css_free, cleanup and free those structures created in alloc. > >> - On max_write, trigger EPC reclaiming if the new limit is at or below > >> current usage. > >> > >> Signed-off-by: Kristen Carlson Accardi > >> Signed-off-by: Haitao Huang > >> --- > >> V5: > >> - Remove prefixes from the callback names (tj) > >> - Update commit message (Jarkko) > >> > >> V4: > >> - Moved this to the front of the series. > >> - Applies on cgroup/for-6.6 with the overflow fix for misc. > >> > >> V3: > >> - Removed the released() callback > >> --- > >> include/linux/misc_cgroup.h | 5 +++++ > >> kernel/cgroup/misc.c | 32 +++++++++++++++++++++++++++++--- > >> 2 files changed, 34 insertions(+), 3 deletions(-) > >> > >> diff --git a/include/linux/misc_cgroup.h b/include/linux/misc_cgroup.h > >> index e799b1f8d05b..96a88822815a 100644 > >> --- a/include/linux/misc_cgroup.h > >> +++ b/include/linux/misc_cgroup.h > >> @@ -37,6 +37,11 @@ struct misc_res { > >> u64 max; > >> atomic64_t usage; > >> atomic64_t events; > >> + > >> + /* per resource callback ops */ > >> + int (*alloc)(struct misc_cg *cg); > >> + void (*free)(struct misc_cg *cg); > >> + void (*max_write)(struct misc_cg *cg); > >> }; > >> > >> /** > >> diff --git a/kernel/cgroup/misc.c b/kernel/cgroup/misc.c > >> index 79a3717a5803..62c9198dee21 100644 > >> --- a/kernel/cgroup/misc.c > >> +++ b/kernel/cgroup/misc.c > >> @@ -276,10 +276,13 @@ static ssize_t misc_cg_max_write(struct =20 > >> kernfs_open_file *of, char *buf, > >> > >> cg =3D css_misc(of_css(of)); > >> > >> - if (READ_ONCE(misc_res_capacity[type])) > >> + if (READ_ONCE(misc_res_capacity[type])) { > >> WRITE_ONCE(cg->res[type].max, max); > >> - else > >> + if (cg->res[type].max_write) > >> + cg->res[type].max_write(cg); > >> + } else { > >> ret =3D -EINVAL; > >> + } > >> > >> return ret ? ret : nbytes; > >> } > >> @@ -383,23 +386,39 @@ static struct cftype misc_cg_files[] =3D { > >> static struct cgroup_subsys_state * > >> misc_cg_alloc(struct cgroup_subsys_state *parent_css) > >> { > >> + struct misc_cg *parent_cg; > >> enum misc_res_type i; > >> struct misc_cg *cg; > >> + int ret; > >> > >> if (!parent_css) { > >> cg =3D &root_cg; > >> + parent_cg =3D &root_cg; > >> } else { > >> cg =3D kzalloc(sizeof(*cg), GFP_KERNEL); > >> if (!cg) > >> return ERR_PTR(-ENOMEM); > >> + parent_cg =3D css_misc(parent_css); > >> } > >> > >> for (i =3D 0; i < MISC_CG_RES_TYPES; i++) { > >> WRITE_ONCE(cg->res[i].max, MAX_NUM); > >> atomic64_set(&cg->res[i].usage, 0); > >> + if (parent_cg->res[i].alloc) { > >> + ret =3D parent_cg->res[i].alloc(cg); > >> + if (ret) > >> + goto alloc_err; > >> + } > >> } > >> > >> return &cg->css; > >> + > >> +alloc_err: > >> + for (i =3D 0; i < MISC_CG_RES_TYPES; i++) > >> + if (parent_cg->res[i].free) > >> + cg->res[i].free(cg); > >> + kfree(cg); > >> + return ERR_PTR(ret); > >> } > >> > >> /** > >> @@ -410,7 +429,14 @@ misc_cg_alloc(struct cgroup_subsys_state =20 > >> *parent_css) > >> */ > >> static void misc_cg_free(struct cgroup_subsys_state *css) > >> { > >> - kfree(css_misc(css)); > >> + struct misc_cg *cg =3D css_misc(css); > >> + enum misc_res_type i; > >> + > >> + for (i =3D 0; i < MISC_CG_RES_TYPES; i++) > >> + if (cg->res[i].free) > >> + cg->res[i].free(cg); > >> + > >> + kfree(cg); > >> } > >> > >> /* Cgroup controller callbacks */ > >> -- > >> 2.25.1 > > > > Since the only existing client feature requires all callbacks, should > > this not have that as an invariant? > > > > I.e. it might be better to fail unless *all* ops are non-nil (e.g. to > > catch issues in the kernel code). > > > > These callbacks are chained from cgroup_subsys, and they are defined =20 > separately so it'd be better follow the same pattern. Or change together= =20 > with cgroup_subsys if we want to do that. Reasonable? I noticed this one later: It would better to create a separate ops struct and declare the instance as const at minimum. Then there is no need for dynamic assigment of ops and all that is in rodata. This is improves both security and also allows static analysis bit better. Now you have to dynamically trace the struct instance, e.g. in case of a bug. If this one done, it would be already in the vmlinux. BR, Jarkko