From nobody Fri Sep 25 21:03:40 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 464FE49F134 for ; Mon, 21 Sep 2026 13:57:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789999036; cv=none; b=jmsn1K7f/Vk4z9UGEfanpCHzZmVqMXH4O4oX0sJbTN+slTtrqHaX0AAR8T8J1pi+ArHegqvmhRInwznE1IE0Uk/3sk43zlYzmiWEKx6abVqbPH74lyCOXdNyYwsWoIeIq5zW7r6oUlZhHwVz1T4Whirh8vM5Z8we/Z3Ddnr4U6Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789999036; c=relaxed/simple; bh=5KhJ7Zg9R8t/i/clFO6bwYjYMFQenzv/pH6dLTfsQeY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jxMlYlGioiIDY/t9e6I7IBWoWyNkP6SgJyD0OXVaiughSi/vY5QyFeUm5uowjFLEospTVu26f+K7GnuoVz/z2rt2OtkvYVpnxmLyIDuFtaclSgSves9Acjg92NhaDZ8Hvkph5cWcMdSPe0lCAMVG0TXzfGTNNqQ0bnikVRY95UA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=jZPOr1nG; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="jZPOr1nG" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4E2061CE0; Mon, 21 Sep 2026 06:57:10 -0700 (PDT) Received: from e134344.cambridge.arm.com (e134344.arm.com [10.2.212.8]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id EF9A93F528; Mon, 21 Sep 2026 06:57:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1789999033; bh=5KhJ7Zg9R8t/i/clFO6bwYjYMFQenzv/pH6dLTfsQeY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jZPOr1nGPUEflXtUV/wNu7a5klt/H6AVrd2IhOWtOHBrA6TvZqBYY4s/MvGGsTC8t b03jN8b+vp+D2S6SJDEpofvnUEsPyhv/S+hzOp+zk05b4PGREWHAxtGZ1NdQf2P3r9 mfJyRCeMcktLGuoKaP037+PCTSBUmP+l+I6Nkh/k= From: Ben Horgan To: reinette.chatre@intel.com Cc: Dave.Martin@arm.com, babu.moger@amd.com, ben.horgan@arm.com, bp@alien8.de, dave.hansen@linux.intel.com, fenghuay@nvidia.com, fustini@kernel.org, james.morse@arm.com, linux-kernel@vger.kernel.org, peternewman@google.com, tglx@linutronix.de, tony.luck@intel.com, x86@kernel.org, yu.c.chen@intel.com Subject: [RFC PATCH 1/3] fs/resctrl: Add schema_name to struct resctrl_ctrl Date: Mon, 21 Sep 2026 14:57:00 +0100 Message-ID: <20260921135702.2874931-2-ben.horgan@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260921135702.2874931-1-ben.horgan@arm.com> References: <20260921135702.2874931-1-ben.horgan@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In order to properly align the schema in the schemata and size file the maximum of length of all the schema names needs to be known. resctrl_resource_ctrl_max_len() makes this calculation but stops short of actually constructing and storing the schema names. As the schema name is based on the resource name and the schema name with some special cases for legacy controls this leads to a lot of conditional formatting when displaying the schema name. Construct the schema name and save it to struct resctrl when mounting resctrl. This makes displaying the schema name easy whilst control of the naming stays within resctrl. Signed-off-by: Ben Horgan --- fs/resctrl/ctrlmondata.c | 51 ++++++----------------------- fs/resctrl/rdtgroup.c | 69 +++++++++++++++++++++++++--------------- include/linux/resctrl.h | 1 + 3 files changed, 55 insertions(+), 66 deletions(-) diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c index 675531009136..efeb36e0db25 100644 --- a/fs/resctrl/ctrlmondata.c +++ b/fs/resctrl/ctrlmondata.c @@ -379,6 +379,9 @@ int resctrl_prefix_width_adjust(struct resctrl_ctrl *ct= rl) { int len; =20 + if (resctrl_ctrl_is_default(ctrl)) + return max_name_width; + len =3D max_name_width - 1 - strlen(resctrl_ctrl_name_str(ctrl->name)); if (len < 0) return 0; @@ -456,33 +459,6 @@ static struct resctrl_ctrl *resctrl_resource_ctrl_get(= struct rdt_resource *r, return NULL; } =20 -/* - * Return length needed to display longest control suffix. - * Add 1 for the "_" character when control name exists. - */ -size_t resctrl_resource_ctrl_max_len(struct rdt_resource *r) -{ - struct resctrl_ctrl *ctrl, *em_ctrl; - size_t total =3D 0; - size_t len; - - for_each_resource_ctrl(ctrl,r) { - /* Remove duplicate code. */ - len =3D strlen(resctrl_ctrl_name_str(ctrl->name)); - if (len) - total =3D max(total, 1 + len); - if (list_empty(&ctrl->emulated_by)) - continue; - list_for_each_entry(em_ctrl, &ctrl->emulated_by, entry) { - len =3D strlen(resctrl_ctrl_name_str(em_ctrl->name)); - if (len) - total =3D max(total, 1 + len); - } - } - - return total; -} - static int rdtgroup_parse_ctrl(char *ctrlname, char *tok, struct rdtgroup *rdtgrp) { @@ -595,14 +571,8 @@ static void show_doms(struct seq_file *s, struct rdt_r= esource_final *f, /* Walking ctrl->domains, ensure it can't race with cpuhp */ lockdep_assert_cpus_held(); =20 - if (print_ctrl) { - if (resctrl_ctrl_is_default(ctrl)) { - seq_printf(s, "%*s:", max_name_width, f->name); - } else { - seq_printf(s, "%*s_%s:", resctrl_prefix_width_adjust(ctrl), - f->name, resctrl_ctrl_name_str(ctrl->name)); - } - } + if (print_ctrl) + seq_printf(s, "%*s:", max_name_width, ctrl->schema_name); list_for_each_entry_rcu(dom, &ctrl->domains, hdr.list, lockdep_is_cpus_he= ld()) { if (sep) seq_puts(s, ";"); @@ -638,18 +608,17 @@ int rdtgroup_schemata_show(struct kernfs_open_file *o= f, if (rdtgrp->mode =3D=3D RDT_MODE_PSEUDO_LOCKSETUP) { list_for_each_entry(f, &rdt_resource_final_all, list) { for_each_enabled_ctrl(ctrl, f->res) - seq_printf(s, "%s%s%s:uninitialized\n", f->name, - resctrl_ctrl_is_default(ctrl) ? "" : "_", - resctrl_ctrl_is_default(ctrl) ? - "" : resctrl_ctrl_name_str(ctrl->name)); + seq_printf(s, "%*s:uninitialized\n", + max_name_width, ctrl->schema_name); } } else if (rdtgrp->mode =3D=3D RDT_MODE_PSEUDO_LOCKED) { if (!rdtgrp->plr->d) { rdt_last_cmd_puts("Cache domain offline\n"); ret =3D -ENODEV; } else { - seq_printf(s, "%s:%d=3D%x\n", - rdtgrp->plr->f->res->name, + ctrl =3D resctrl_resource_ctrl_get_default(f->res); + seq_printf(s, "%*s:%d=3D%x\n", + max_name_width, ctrl->schema_name, rdtgrp->plr->d->hdr.id, rdtgrp->plr->cbm); } diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index 416b73c57016..deb47edb2e87 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -1850,13 +1850,7 @@ static int rdtgroup_size_show(struct kernfs_open_fil= e *of, type =3D f->conf_type; for_each_enabled_ctrl(ctrl, r) { sep =3D false; - if (resctrl_ctrl_is_default(ctrl)) { - seq_printf(s, "%*s:", max_name_width, f->name); - } else { - seq_printf(s, "%*s_%s:", resctrl_prefix_width_adjust(ctrl), - f->name, - resctrl_ctrl_name_str(ctrl->name)); - } + seq_printf(s, "%*s:", max_name_width, ctrl->schema_name); list_for_each_entry_rcu(d, &ctrl->domains, hdr.list, lockdep_is_cpus_he= ld()) { if (sep) seq_putc(s, ';'); @@ -3375,11 +3369,28 @@ static int rdt_enable_ctx(struct rdt_fs_context *ct= x) return ret; } =20 +static void update_max_name_width(struct rdt_resource *r, char *name) +{ + int cl =3D strlen(name); + + /* + * If CDP is supported by this resource, but not enabled, + * include the suffix. This ensures the tabular format of the + * schemata file does not change between mounts of the filesystem. + */ + if (r->cdp_capable && !resctrl_arch_get_cdp_enabled(r)) + cl +=3D 4; + + if (cl > max_name_width) + max_name_width =3D cl; +} + static int final_resources_list_add(struct rdt_resource *r, enum resctrl_c= onf_type type) { + struct resctrl_ctrl *ctrl, *em_ctrl; struct rdt_resource_final *f; const char *suffix =3D ""; - int ret, cl; + int ret; =20 f =3D kzalloc_obj(*f); if (!f) @@ -3409,24 +3420,32 @@ static int final_resources_list_add(struct rdt_reso= urce *r, enum resctrl_conf_ty return -EINVAL; } =20 - cl =3D strlen(f->name); - - /* - * Maintain tabular format by taking into account the names of all - * the resource's controls. - */ - cl +=3D resctrl_resource_ctrl_max_len(f->res); - - /* - * If CDP is supported by this resource, but not enabled, - * include the suffix. This ensures the tabular format of the - * schemata file does not change between mounts of the filesystem. - */ - if (r->cdp_capable && !resctrl_arch_get_cdp_enabled(r)) - cl +=3D 4; + for_each_resource_ctrl(ctrl, r) { + if (resctrl_ctrl_is_default(ctrl)) { + ret =3D snprintf(ctrl->schema_name, sizeof(ctrl->schema_name), + "%s", f->name); + } else { + ret =3D snprintf(ctrl->schema_name, sizeof(ctrl->schema_name), + "%s_%s", f->name, resctrl_ctrl_name_str(ctrl->name)); + } + if (ret >=3D sizeof(ctrl->schema_name)) { + kfree(f); + return -EINVAL; + } + update_max_name_width(r, ctrl->schema_name); =20 - if (cl > max_name_width) - max_name_width =3D cl; + if (list_empty(&ctrl->emulated_by)) + continue; + list_for_each_entry(em_ctrl, &ctrl->emulated_by, entry) { + ret =3D snprintf(em_ctrl->schema_name, sizeof(em_ctrl->schema_name), + "%s_%s", f->name, resctrl_ctrl_name_str(em_ctrl->name)); + if (ret >=3D sizeof(em_ctrl->schema_name)) { + kfree(f); + return -EINVAL; + } + update_max_name_width(r, ctrl->schema_name); + } + } =20 INIT_LIST_HEAD(&f->list); list_add(&f->list, &rdt_resource_final_all); diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index 54fec07bd173..5be8991d45eb 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -437,6 +437,7 @@ struct resctrl_ctrl { struct list_head domains; enum resctrl_ctrl_type type; enum resctrl_ctrl_name name; + char schema_name[32]; union { struct resctrl_ctrl_bitmap bitmap; struct resctrl_ctrl_scalar scalar; --=20 2.43.0 From nobody Fri Sep 25 21:03:40 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D9F2A4A1DE0 for ; Mon, 21 Sep 2026 13:57:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789999040; cv=none; b=eYI11oJcyHtoo/pOln9YJUnKkm1PFP9WzIOPCPukXzZXR6EWQLyV9+gskQ/X1UWzLXNW+fSX0FbEFXmMsUX2wL63AdYN5UGChm8Xw+LVmibnhf2noMpqkJFWOxWMnUyA1cOcWY6k6MTZw8KkfaXljMbf53oYUW0/ihbumiFDCh0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789999040; c=relaxed/simple; bh=ziJAcfm3TK6RrK87RrtizCgnSxoE6J6ewE7wzNYYcBw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G6P9x5Tq52oJC9fIs6LZ2zjdIkk0WYDH3uFQL7PqVyZ4/GetgJRHro/mHdKQsbYHmD1tvXP+Rp8QqypU/44Q7HyfBrLWDOVOiU3OtuD8BpUlcSvPdCVvZRYPYDeOOf88ds61nH+R0mSUbUy5A1P7eamab3EUF246C5jYNzCoe+Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=djgasQBh; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="djgasQBh" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8236819F6; Mon, 21 Sep 2026 06:57:12 -0700 (PDT) Received: from e134344.cambridge.arm.com (e134344.arm.com [10.2.212.8]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 2360D3F528; Mon, 21 Sep 2026 06:57:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1789999036; bh=ziJAcfm3TK6RrK87RrtizCgnSxoE6J6ewE7wzNYYcBw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=djgasQBhgEMz5ofF4MIaeHQPltp+Cv3rmAiah6OdIDA/xaaKYi/cYHs5IUQUqKlEo EjdlGWePEmyJATF1cVDkbJTvfBWX6SKGCXOC28nx/TeYye7eSzmSn7ZLTJw0zzboZi LWVrT3jq0FltOFgT3YtU+aeMaVP8EbUcYJO8Mwko= From: Ben Horgan To: reinette.chatre@intel.com Cc: Dave.Martin@arm.com, babu.moger@amd.com, ben.horgan@arm.com, bp@alien8.de, dave.hansen@linux.intel.com, fenghuay@nvidia.com, fustini@kernel.org, james.morse@arm.com, linux-kernel@vger.kernel.org, peternewman@google.com, tglx@linutronix.de, tony.luck@intel.com, x86@kernel.org, yu.c.chen@intel.com Subject: [RFC PATCH 2/3] fs/resctrl: Use correct schema name in bw_validate() last_cmd_status messages Date: Mon, 21 Sep 2026 14:57:01 +0100 Message-ID: <20260921135702.2874931-3-ben.horgan@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260921135702.2874931-1-ben.horgan@arm.com> References: <20260921135702.2874931-1-ben.horgan@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As bw_validate() is now used for all scalar controls update the last_cmd_status messages to display the actual schema name rather than unconditionally using "MB". Signed-off-by: Ben Horgan --- fs/resctrl/ctrlmondata.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c index efeb36e0db25..968eb04046e9 100644 --- a/fs/resctrl/ctrlmondata.c +++ b/fs/resctrl/ctrlmondata.c @@ -131,7 +131,8 @@ static bool bw_validate(char *buf, u32 *data, struct rd= t_resource *r, =20 ret =3D kstrtou32(buf, 10, &bw); if (ret) { - rdt_last_cmd_printf("Invalid MB value %s\n", buf); + rdt_last_cmd_printf("Invalid %s value %s\n", ctrl->schema_name, buf); + return false; } =20 @@ -142,8 +143,9 @@ static bool bw_validate(char *buf, u32 *data, struct rd= t_resource *r, } =20 if (bw < ctrl->scalar.min || bw > ctrl->scalar.max) { - rdt_last_cmd_printf("MB value %u out of range [%d,%d]\n", - bw, ctrl->scalar.min, ctrl->scalar.max); + rdt_last_cmd_printf("%s value %u out of range [%d,%d]\n", + ctrl->schema_name, bw, ctrl->scalar.min, ctrl->scalar.max); + return false; } =20 --=20 2.43.0 From nobody Fri Sep 25 21:03:40 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0CAE14A093D for ; Mon, 21 Sep 2026 13:57:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789999041; cv=none; b=RbR1PfwiSXG9F9yZu2gKLTGjYF49eQIfYFqOrifJzDqBKbNlb4xzOZdX8z7+xkc2BgWar5PMRdgOdCieqKQXlYwcLk3lavJVMViJNHNOFrPKoKfyXFPNDpWJFlvMexBkqVSvEgMnjV1ZO5qhmrVT80aZUQU+izkM4+/WgK2uF+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789999041; c=relaxed/simple; bh=krGY+lo9qL7tk8aDr46NS4pANsT7BmFp4RwLCfQW1jg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aLta/9h3k2bqJybLft9fS4/e+c1fGF06kbnH9WnwfM84Iu/2UwK4MoSu1XeQDkarj9LWvF9K9ld9jM98Jq1lgpbLjMHynB7LoBQj0ala/7QWE1Qy/Q6TyTB29Gmb1TFQIyBld8iMyrEIDlUOa5QvU4r7obHugJNnjhBv3eo/3+k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=gCTtn60x; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="gCTtn60x" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A70431CE0; Mon, 21 Sep 2026 06:57:14 -0700 (PDT) Received: from e134344.cambridge.arm.com (e134344.arm.com [10.2.212.8]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 5441A3F528; Mon, 21 Sep 2026 06:57:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1789999038; bh=krGY+lo9qL7tk8aDr46NS4pANsT7BmFp4RwLCfQW1jg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gCTtn60xiCLsopErCXForjNfd4nDz79a05hzXCj07vZDqPSXJvsPu8pagkRgR0qPS MUuodSstzZJ+pJSR7CVQoGFzzQ08UY9eWuak8aqvBJoH6JW/HZEcEoa3XVB76LHgzv +uzF2BBkogQaXcnYcWO5pBjYqabUFW6vy6Ber4G0= From: Ben Horgan To: reinette.chatre@intel.com Cc: Dave.Martin@arm.com, babu.moger@amd.com, ben.horgan@arm.com, bp@alien8.de, dave.hansen@linux.intel.com, fenghuay@nvidia.com, fustini@kernel.org, james.morse@arm.com, linux-kernel@vger.kernel.org, peternewman@google.com, tglx@linutronix.de, tony.luck@intel.com, x86@kernel.org, yu.c.chen@intel.com Subject: [RFC PATCH 3/3] fs/resctrl: display size for scalar cache controls Date: Mon, 21 Sep 2026 14:57:02 +0100 Message-ID: <20260921135702.2874931-4-ben.horgan@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260921135702.2874931-1-ben.horgan@arm.com> References: <20260921135702.2874931-1-ben.horgan@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" resctrl allows controls specifying a minimum or maximum cache allocation but does not display their sizes in the 'size' file. Calculate the size of any scalar cache controls and add them to the 'size' = file. Signed-off-by: Ben Horgan --- fs/resctrl/internal.h | 4 ++-- fs/resctrl/pseudo_lock.c | 2 +- fs/resctrl/rdtgroup.c | 41 +++++++++++++++++++++++++++------------- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h index 4bd09b1541c7..119f702a4f1f 100644 --- a/fs/resctrl/internal.h +++ b/fs/resctrl/internal.h @@ -362,8 +362,8 @@ bool rdtgroup_cbm_overlaps(struct rdt_resource_final *f= , struct rdt_ctrl_domain unsigned long cbm, int closid, bool exclusive, struct resctrl_ctrl *ctrl); =20 -unsigned int rdtgroup_cbm_to_size(struct rdt_resource *r, struct resctrl_c= trl *ctrl, - struct rdt_ctrl_domain *d, unsigned long cbm); +unsigned int rdtgroup_cache_ctrl_to_size(struct rdt_resource *r, struct re= sctrl_ctrl *ctrl, + struct rdt_ctrl_domain *d, unsigned long ctrl_val); =20 enum rdtgrp_mode rdtgroup_mode_by_closid(int closid); =20 diff --git a/fs/resctrl/pseudo_lock.c b/fs/resctrl/pseudo_lock.c index 17b99a075eaf..36881491d074 100644 --- a/fs/resctrl/pseudo_lock.c +++ b/fs/resctrl/pseudo_lock.c @@ -255,7 +255,7 @@ static int pseudo_lock_region_init(struct pseudo_lock_r= egion *plr) ci =3D get_cpu_cacheinfo_level(plr->cpu, scope); if (ci) { plr->line_size =3D ci->coherency_line_size; - plr->size =3D rdtgroup_cbm_to_size(plr->f->res, ctrl, plr->d, plr->cbm); + plr->size =3D rdtgroup_cache_ctrl_to_size(plr->f->res, ctrl, plr->d, plr= ->cbm); return 0; } =20 diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index deb47edb2e87..ab0d8d0454f6 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -1751,20 +1751,27 @@ static ssize_t rdtgroup_mode_write(struct kernfs_op= en_file *of, * * Return: Size (in bytes) of cache portion represented by CBM, 0 on failu= re. */ -unsigned int rdtgroup_cbm_to_size(struct rdt_resource *r, struct resctrl_c= trl *ctrl, - struct rdt_ctrl_domain *d, unsigned long cbm) +unsigned int rdtgroup_cache_ctrl_to_size(struct rdt_resource *r, struct re= sctrl_ctrl *ctrl, + struct rdt_ctrl_domain *d, unsigned long ctrl_val) { unsigned int size =3D 0; struct cacheinfo *ci; - int num_b; =20 if (WARN_ON_ONCE(r->ctrl_scope !=3D RESCTRL_L2_CACHE && r->ctrl_scope != =3D RESCTRL_L3_CACHE)) return size; =20 - num_b =3D bitmap_weight(&cbm, ctrl->bitmap.cbm_len); ci =3D get_cpu_cacheinfo_level(cpumask_any(&d->hdr.cpu_mask), r->ctrl_sco= pe); - if (ci) + if (!ci) + return size; + + if (ctrl->type =3D=3D RESCTRL_CTRL_BITMAP) { + int num_b; + + num_b =3D bitmap_weight(&ctrl_val, ctrl->bitmap.cbm_len); size =3D ci->size / ctrl->bitmap.cbm_len * num_b; + } else { + size =3D ci->size / ctrl->scalar.resolution * ctrl->scalar.scale * ctrl_= val; + } =20 return size; } @@ -1834,10 +1841,10 @@ static int rdtgroup_size_show(struct kernfs_open_fi= le *of, } seq_printf(s, "%*s:", max_name_width, rdtgrp->plr->f->name); - size =3D rdtgroup_cbm_to_size(rdtgrp->plr->f->res, - ctrl, - rdtgrp->plr->d, - rdtgrp->plr->cbm); + size =3D rdtgroup_cache_ctrl_to_size(rdtgrp->plr->f->res, + ctrl, + rdtgrp->plr->d, + rdtgrp->plr->cbm); seq_printf(s, "%d=3D%u\n", rdtgrp->plr->d->hdr.id, size); } goto out; @@ -1863,11 +1870,19 @@ static int rdtgroup_size_show(struct kernfs_open_fi= le *of, ctrl_val =3D resctrl_arch_get_config(r, ctrl, d, closid, type); - if (r->rid =3D=3D RDT_RESOURCE_MBA || - r->rid =3D=3D RDT_RESOURCE_SMBA) + switch (r->rid) { + case RDT_RESOURCE_L3: + case RDT_RESOURCE_L2: + size =3D rdtgroup_cache_ctrl_to_size(r, ctrl, d, + ctrl_val); + break; + case RDT_RESOURCE_MBA: + case RDT_RESOURCE_SMBA: size =3D ctrl_val; - else - size =3D rdtgroup_cbm_to_size(r, ctrl, d, ctrl_val); + break; + case RDT_RESOURCE_PERF_PKG: + size =3D 0; + } } seq_printf(s, "%d=3D%u", d->hdr.id, size); sep =3D true; --=20 2.43.0