[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251013223348.103390-21-tony.luck@intel.com>
Date: Mon, 13 Oct 2025 15:33:34 -0700
From: Tony Luck <tony.luck@...el.com>
To: Fenghua Yu <fenghuay@...dia.com>,
Reinette Chatre <reinette.chatre@...el.com>,
Maciej Wieczor-Retman <maciej.wieczor-retman@...el.com>,
Peter Newman <peternewman@...gle.com>,
James Morse <james.morse@....com>,
Babu Moger <babu.moger@....com>,
Drew Fustini <dfustini@...libre.com>,
Dave Martin <Dave.Martin@....com>,
Chen Yu <yu.c.chen@...el.com>
Cc: x86@...nel.org,
linux-kernel@...r.kernel.org,
patches@...ts.linux.dev,
Tony Luck <tony.luck@...el.com>
Subject: [PATCH v12 20/31] fs/resctrl: Refactor mkdir_mondata_subdir()
mkdir_mondata_subdir() is unreasonably complicated because of the support for
Sub-NUMA Cluster (SNC) mode.
Split out the SNC code into a helper function to make it easier to add support
for a new telemetry resource.
Suggested-by: Reinette Chatre <reinette.chatre@...el.com>
Signed-off-by: Tony Luck <tony.luck@...el.com>
---
fs/resctrl/rdtgroup.c | 83 +++++++++++++++++++++++++++----------------
1 file changed, 52 insertions(+), 31 deletions(-)
diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c
index c9d2cc1fd8bf..b7eaa4388768 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c
@@ -3196,22 +3196,16 @@ static void rmdir_mondata_subdir_allrdtgrp(struct rdt_resource *r,
static int mon_add_all_files(struct kernfs_node *kn, struct rdt_domain_hdr *hdr,
struct rdt_resource *r, struct rdtgroup *prgrp,
- bool do_sum)
+ int domid, bool do_sum)
{
struct rmid_read rr = {0};
- struct rdt_l3_mon_domain *d;
struct mon_data *priv;
struct mon_evt *mevt;
- int ret, domid;
-
- if (!domain_header_is_valid(hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3))
- return -EINVAL;
+ int ret;
- d = container_of(hdr, struct rdt_l3_mon_domain, hdr);
for_each_mon_event(mevt) {
if (mevt->rid != r->rid || !mevt->enabled)
continue;
- domid = do_sum ? d->ci_id : d->hdr.id;
priv = mon_get_kn_priv(r->rid, domid, mevt, do_sum);
if (WARN_ON_ONCE(!priv))
return -EINVAL;
@@ -3227,24 +3221,20 @@ static int mon_add_all_files(struct kernfs_node *kn, struct rdt_domain_hdr *hdr,
return 0;
}
-static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
- struct rdt_domain_hdr *hdr,
- struct rdt_resource *r, struct rdtgroup *prgrp)
+static int mkdir_mondata_subdir_snc(struct kernfs_node *parent_kn,
+ struct rdt_domain_hdr *hdr,
+ struct rdt_resource *r, struct rdtgroup *prgrp)
{
struct kernfs_node *kn, *ckn;
struct rdt_l3_mon_domain *d;
char name[32];
- bool snc_mode;
int ret = 0;
- lockdep_assert_held(&rdtgroup_mutex);
-
if (!domain_header_is_valid(hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3))
return -EINVAL;
d = container_of(hdr, struct rdt_l3_mon_domain, hdr);
- snc_mode = r->mon_scope == RESCTRL_L3_NODE;
- sprintf(name, "mon_%s_%02d", r->name, snc_mode ? d->ci_id : d->hdr.id);
+ sprintf(name, "mon_%s_%02d", r->name, d->ci_id);
kn = kernfs_find_and_get(parent_kn, name);
if (kn) {
/*
@@ -3260,27 +3250,58 @@ static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
ret = rdtgroup_kn_set_ugid(kn);
if (ret)
goto out_destroy;
- ret = mon_add_all_files(kn, hdr, r, prgrp, snc_mode);
+ ret = mon_add_all_files(kn, hdr, r, prgrp, d->ci_id, true);
if (ret)
goto out_destroy;
}
- if (snc_mode) {
- sprintf(name, "mon_sub_%s_%02d", r->name, hdr->id);
- ckn = kernfs_create_dir(kn, name, parent_kn->mode, prgrp);
- if (IS_ERR(ckn)) {
- ret = -EINVAL;
- goto out_destroy;
- }
+ sprintf(name, "mon_sub_%s_%02d", r->name, hdr->id);
+ ckn = kernfs_create_dir(kn, name, parent_kn->mode, prgrp);
+ if (IS_ERR(ckn)) {
+ ret = -EINVAL;
+ goto out_destroy;
+ }
- ret = rdtgroup_kn_set_ugid(ckn);
- if (ret)
- goto out_destroy;
+ ret = rdtgroup_kn_set_ugid(ckn);
+ if (ret)
+ goto out_destroy;
- ret = mon_add_all_files(ckn, hdr, r, prgrp, false);
- if (ret)
- goto out_destroy;
- }
+ ret = mon_add_all_files(ckn, hdr, r, prgrp, hdr->id, false);
+ if (ret)
+ goto out_destroy;
+
+ kernfs_activate(kn);
+ return 0;
+
+out_destroy:
+ kernfs_remove(kn);
+ return ret;
+}
+
+static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
+ struct rdt_domain_hdr *hdr,
+ struct rdt_resource *r, struct rdtgroup *prgrp)
+{
+ struct kernfs_node *kn;
+ char name[32];
+ int ret = 0;
+
+ lockdep_assert_held(&rdtgroup_mutex);
+
+ if (r->mon_scope == RESCTRL_L3_NODE)
+ return mkdir_mondata_subdir_snc(parent_kn, hdr, r, prgrp);
+
+ sprintf(name, "mon_%s_%02d", r->name, hdr->id);
+ kn = kernfs_create_dir(parent_kn, name, parent_kn->mode, prgrp);
+ if (IS_ERR(kn))
+ return PTR_ERR(kn);
+
+ ret = rdtgroup_kn_set_ugid(kn);
+ if (ret)
+ goto out_destroy;
+ ret = mon_add_all_files(kn, hdr, r, prgrp, hdr->id, false);
+ if (ret)
+ goto out_destroy;
kernfs_activate(kn);
return 0;
--
2.51.0
Powered by blists - more mailing lists