[PATCH v3 2/3] fs/resctrl: Assign counters to existing groups when enabling mbm_event
From: Babu Moger
Date: Fri Oct 02 2026 - 17:28:01 EST
When the user enables counter assignment mode by writing "mbm_event"
to /sys/fs/resctrl/info/L3_MON/mbm_assign_mode, resctrl resets all
monitoring state and sets mbm_assign_on_mkdir for subsequent mkdir, but
does not assign counters to groups that already exist, including the
default group created at mount. The counters of those groups return
"Unassigned" until the user assigns counters by hand.
Enable mbm_assign_on_mkdir and assign counters, while there are some
available, to existing CTRL_MON and MON groups so the switch matches
mkdir auto-assignment. An event left without a counter reads
"Unassigned".
Fixes: 8004ea01cf63 ("fs/resctrl: Introduce the interface to switch between monitor modes")
Reported-by: Sashiko <sashiko-bot@xxxxxxxxxx>
Closes: https://sashiko.dev/#/patchset/8cb66e18e32e4087a9712c1e68ee6da614efe244.1784322818.git.babu.moger%40amd.com
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Babu Moger <babu.moger@xxxxxxx>
---
v3: Changelog update.
Code comment cleanup.
Added Cc to stable.
Added Reported-by and Closes tags.
v2: New patch.
This patch addresses the Sashiko comment about documentation issue where
counters are not assigned automatically when mode is switched to mbm_event.
https://sashiko.dev/#/patchset/8cb66e18e32e4087a9712c1e68ee6da614efe244.1784322818.git.babu.moger%40amd.com
In fact, it exposed a real issue. When switching to mbm_event mode, existing
monitoring groups should be assigned counters whenever counters are available.
This provides a smooth transition between modes and aligns the behavior with
the existing auto-assignment mechanism.
---
Documentation/filesystems/resctrl.rst | 7 ++++--
fs/resctrl/monitor.c | 35 +++++++++++++++++++++++----
2 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst
index b52795e03303..c8507580474a 100644
--- a/Documentation/filesystems/resctrl.rst
+++ b/Documentation/filesystems/resctrl.rst
@@ -370,8 +370,11 @@ with the following files:
of counters available is described in the "num_mbm_cntrs" file. Changing the
mode may cause all counters on the resource to reset.
- Moving to mbm_event counter assignment mode requires users to assign the counters
- to the events. Otherwise, the MBM event counters will return 'Unassigned' when read.
+ Moving to mbm_event counter assignment mode enables "mbm_assign_on_mkdir" and
+ assigns counters to the events of all existing monitoring groups, including
+ the default group, while counters remain available. Consult
+ "mbm_L3_assignments" after switching to "mbm_event" mode for counter
+ assignment states of all monitoring groups.
The mode is beneficial for AMD platforms that support more CTRL_MON
and MON groups than available hardware counters. By default, this
diff --git a/fs/resctrl/monitor.c b/fs/resctrl/monitor.c
index 73413cb128ea..fca0734bf346 100644
--- a/fs/resctrl/monitor.c
+++ b/fs/resctrl/monitor.c
@@ -1300,8 +1300,7 @@ static int rdtgroup_assign_cntr_event(struct rdt_l3_mon_domain *d, struct rdtgro
}
/*
- * rdtgroup_assign_cntrs() - Assign counters to MBM events. Called when
- * a new group is created.
+ * rdtgroup_assign_cntrs() - Assign counters to MBM events.
*
* Each group can accommodate two counters per domain: one for the total
* event and one for the local event. Assignments may fail due to the limited
@@ -1326,6 +1325,22 @@ void rdtgroup_assign_cntrs(struct rdtgroup *rdtgrp)
&mon_event_all[QOS_L3_MBM_LOCAL_EVENT_ID]);
}
+/*
+ * resctrl_assign_cntrs_allrdtgrp() - Assign counters to the MBM events of
+ * every existing group.
+ */
+static void resctrl_assign_cntrs_allrdtgrp(void)
+{
+ struct rdtgroup *prgrp, *crgrp;
+
+ list_for_each_entry(prgrp, &rdt_all_groups, rdtgroup_list) {
+ rdtgroup_assign_cntrs(prgrp);
+
+ list_for_each_entry(crgrp, &prgrp->mon.crdtgrp_list, mon.crdtgrp_list)
+ rdtgroup_assign_cntrs(crgrp);
+ }
+}
+
/*
* rdtgroup_free_unassign_cntr() - Unassign and reset the counter ID configuration
* for the event pointed to by @mevt within the domain @d and resctrl group @rdtgrp.
@@ -1599,9 +1614,6 @@ ssize_t resctrl_mbm_assign_mode_write(struct kernfs_open_file *of, char *buf,
(READS_TO_LOCAL_MEM |
READS_TO_LOCAL_S_MEM |
NON_TEMP_WRITE_TO_LOCAL_MEM);
- /* Enable auto assignment when switching to "mbm_event" mode */
- if (enable)
- r->mon.mbm_assign_on_mkdir = true;
/*
* Reset all the non-achitectural RMID state and assignable counters.
*/
@@ -1609,6 +1621,19 @@ ssize_t resctrl_mbm_assign_mode_write(struct kernfs_open_file *of, char *buf,
mbm_cntr_free_all(r, d);
resctrl_reset_rmid_all(r, d);
}
+
+ /*
+ * Counters were freed above, so both new groups (via mkdir) and
+ * the groups that already exist need assignments. Groups created
+ * while in "default" mode have no counter assigned, including the
+ * default group created when resctrl is mounted. Assign counters
+ * to them so that enabling the mode leaves the same assignments
+ * that mkdir would have made.
+ */
+ if (enable) {
+ r->mon.mbm_assign_on_mkdir = true;
+ resctrl_assign_cntrs_allrdtgrp();
+ }
}
out_unlock:
--
2.43.0