[PATCH RFC v2 02/19] resctrl: Expose MBA MBM counter assignment sysfs
From: Fenghua Yu <fenghuay@nvidia.com>
Date: 2026-08-31 17:23:20
Also in:
lkml
Subsystem:
filesystems (vfs and infrastructure), rdt - resource allocation, the rest · Maintainers:
Alexander Viro, Christian Brauner, Tony Luck, Reinette Chatre, Linus Torvalds
When MBWU monitoring is backed by an MBA resource, userspace still needs the same counter-assignment interface as on L3, but keyed to MBA domains and exposed as mbm_NODE_assignments rather than mbm_L3_assignments. Add the MBA-side sysfs hooks and initialise MBA monitor metadata during resctrl_mon_init() so mbm_* file visibility follows the resource being configured. Signed-off-by: Shanker Donthineni <redacted> Signed-off-by: Fenghua Yu <fenghuay@nvidia.com> --- fs/resctrl/internal.h | 5 +++++ fs/resctrl/monitor.c | 27 +++++++++++++++++++++++++-- fs/resctrl/rdtgroup.c | 11 ++++++++--- 3 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h
index af2e6e0b2af8..32c7d53790ec 100644
--- a/fs/resctrl/internal.h
+++ b/fs/resctrl/internal.h@@ -480,6 +480,11 @@ struct resctrl_ctrl *resctrl_resource_ctrl_get_default(struct rdt_resource *r); const char *resctrl_ctrl_name_str(enum resctrl_ctrl_name name); bool resctrl_ctrl_is_default(struct resctrl_ctrl *ctrl); +int mbm_NODE_assignments_show(struct kernfs_open_file *of, struct seq_file *s, void *v); + +ssize_t mbm_NODE_assignments_write(struct kernfs_open_file *of, char *buf, + size_t nbytes, loff_t off); + #ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp);
diff --git a/fs/resctrl/monitor.c b/fs/resctrl/monitor.c
index 2b5654f05480..5865a509174c 100644
--- a/fs/resctrl/monitor.c
+++ b/fs/resctrl/monitor.c@@ -538,6 +538,7 @@ static int __mon_event_count(struct rdtgroup *rdtgrp, struct rmid_read *rr) { switch (rr->r->rid) { case RDT_RESOURCE_L3: + case RDT_RESOURCE_MBA: WARN_ON_ONCE(rr->evt->any_cpu); if (rr->hdr) return __l3_mon_event_count(rdtgrp, rr);
@@ -1741,6 +1742,12 @@ int mbm_L3_assignments_show(struct kernfs_open_file *of, struct seq_file *s, voi resctrl_arch_get_resource(RDT_RESOURCE_L3)); } +int mbm_NODE_assignments_show(struct kernfs_open_file *of, struct seq_file *s, void *v) +{ + return mbm_assignments_show(of, s, v, + resctrl_arch_get_resource(RDT_RESOURCE_MBA)); +} + /* * mbm_get_mon_event_by_name() - Return the mon_evt entry for the matching * event name.
@@ -1890,6 +1897,13 @@ ssize_t mbm_L3_assignments_write(struct kernfs_open_file *of, char *buf, resctrl_arch_get_resource(RDT_RESOURCE_L3)); } +ssize_t mbm_NODE_assignments_write(struct kernfs_open_file *of, char *buf, + size_t nbytes, loff_t off) +{ + return mbm_assignments_write(of, buf, nbytes, off, + resctrl_arch_get_resource(RDT_RESOURCE_MBA)); +} + static int closid_num_dirty_rmid_alloc(struct rdt_resource *r) { if (IS_ENABLED(CONFIG_RESCTRL_RMID_DEPENDS_ON_CLOSID)) {
@@ -1933,7 +1947,7 @@ static void resctrl_mon_resource_init(struct rdt_resource *r) { unsigned long fflags; - fflags = RFTYPE_RES_CACHE; + fflags = (r->rid == RDT_RESOURCE_MBA) ? RFTYPE_RES_MB : RFTYPE_RES_CACHE; if (resctrl_arch_is_evt_configurable(QOS_L3_MBM_TOTAL_EVENT_ID)) { mon_event_all[QOS_L3_MBM_TOTAL_EVENT_ID].configurable = true;
@@ -1969,7 +1983,10 @@ static void resctrl_mon_resource_init(struct rdt_resource *r) resctrl_file_mode_init("event_filter", 0644); resctrl_file_fflags_init("mbm_assign_on_mkdir", RFTYPE_MON_INFO | fflags); - resctrl_file_fflags_init("mbm_L3_assignments", RFTYPE_MON_BASE); + if (r->rid == RDT_RESOURCE_MBA) + resctrl_file_fflags_init("mbm_NODE_assignments", RFTYPE_MON_BASE); + else + resctrl_file_fflags_init("mbm_L3_assignments", RFTYPE_MON_BASE); resctrl_file_fflags_init("mbm_assign_mode", RFTYPE_MON_INFO | fflags); }
@@ -2002,6 +2019,12 @@ int resctrl_mon_init(void) resctrl_mon_resource_init(r); + r = resctrl_arch_get_resource(RDT_RESOURCE_MBA); + if (!r->mon_capable) + return 0; + + resctrl_mon_resource_init(r); + return 0; }
diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c
index a658e4958562..a0635888a0a0 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c@@ -2307,6 +2307,13 @@ static struct rftype res_common_files[] = { .seq_show = mbm_L3_assignments_show, .write = mbm_L3_assignments_write, }, + { + .name = "mbm_NODE_assignments", + .mode = 0644, + .kf_ops = &rdtgroup_kf_single_ops, + .seq_show = mbm_NODE_assignments_show, + .write = mbm_NODE_assignments_write, + }, { .name = "mbm_assign_mode", .mode = 0644,
@@ -5199,10 +5206,8 @@ int resctrl_online_ctrl_domain(struct rdt_resource *r, struct resctrl_ctrl *ctrl mutex_lock(&rdtgroup_mutex); - if (supports_mba_mbps(ctrl) && r->rid == RDT_RESOURCE_MBA) { - /* RDT_RESOURCE_MBA is never mon_capable */ + if (supports_mba_mbps(ctrl) && r->rid == RDT_RESOURCE_MBA) err = mba_sc_domain_allocate(r, d); - } mutex_unlock(&rdtgroup_mutex);
--
2.53.0