]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
fs/resctrl: Introduce mbm_L3_assignments to list assignments in a group
authorBabu Moger <babu.moger@amd.com>
Fri, 5 Sep 2025 21:34:27 +0000 (16:34 -0500)
committerBorislav Petkov (AMD) <bp@alien8.de>
Mon, 15 Sep 2025 10:45:34 +0000 (12:45 +0200)
Introduce the mbm_L3_assignments resctrl file associated with CTRL_MON and MON
resource groups to display the counter assignment states of the resource group
when "mbm_event" counter assignment mode is enabled.

Display the list in the following format:
<Event>:<Domain id>=<Assignment state>;<Domain id>=<Assignment state>

Event: A valid MBM event listed in
      /sys/fs/resctrl/info/L3_MON/event_configs directory.

Domain ID: A valid domain ID.

The assignment state can be one of the following:

_ : No counter assigned.

e : Counter assigned exclusively.

Example:
To list the assignment states for the default group
  $ cd /sys/fs/resctrl
  $ cat /sys/fs/resctrl/mbm_L3_assignments
  mbm_total_bytes:0=e;1=e
  mbm_local_bytes:0=e;1=e

Signed-off-by: Babu Moger <babu.moger@amd.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Link: https://lore.kernel.org/cover.1757108044.git.babu.moger@amd.com
Documentation/filesystems/resctrl.rst
fs/resctrl/internal.h
fs/resctrl/monitor.c
fs/resctrl/rdtgroup.c

index 1de815b3a07b459d9502899da0f0c550f02de579..a2b7240b0818b55958bd2af8efa79cea145438f7 100644 (file)
@@ -509,6 +509,37 @@ When monitoring is enabled all MON groups will also contain:
        Available only with debug option. The identifier used by hardware
        for the monitor group. On x86 this is the RMID.
 
+When monitoring is enabled all MON groups may also contain:
+
+"mbm_L3_assignments":
+       Exists when "mbm_event" counter assignment mode is supported and lists the
+       counter assignment states of the group.
+
+       The assignment list is displayed in the following format:
+
+       <Event>:<Domain ID>=<Assignment state>;<Domain ID>=<Assignment state>
+
+       Event: A valid MBM event in the
+              /sys/fs/resctrl/info/L3_MON/event_configs directory.
+
+       Domain ID: A valid domain ID.
+
+       Assignment states:
+
+       _ : No counter assigned.
+
+       e : Counter assigned exclusively.
+
+       Example:
+
+       To display the counter assignment states for the default group.
+       ::
+
+        # cd /sys/fs/resctrl
+        # cat /sys/fs/resctrl/mbm_L3_assignments
+          mbm_total_bytes:0=e;1=e
+          mbm_local_bytes:0=e;1=e
+
 When the "mba_MBps" mount option is used all CTRL_MON groups will also contain:
 
 "mba_MBps_event":
index 66c677c1b858816991e9ea15f385af8a1505d56f..43297b36f5ddaf0f106c204298d83081c7ce2dc0 100644 (file)
@@ -416,6 +416,8 @@ int resctrl_mbm_assign_on_mkdir_show(struct kernfs_open_file *of,
 ssize_t resctrl_mbm_assign_on_mkdir_write(struct kernfs_open_file *of, char *buf,
                                          size_t nbytes, loff_t off);
 
+int mbm_L3_assignments_show(struct kernfs_open_file *of, struct seq_file *s, void *v);
+
 #ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK
 int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp);
 
index 9cb334136d210ac77f6e0aa0351663b2c641f67d..b692a0ef17107dfcc8da902bd07f158f4a0b44e4 100644 (file)
@@ -1454,6 +1454,54 @@ out_unlock:
        return ret;
 }
 
+int mbm_L3_assignments_show(struct kernfs_open_file *of, struct seq_file *s, void *v)
+{
+       struct rdt_resource *r = resctrl_arch_get_resource(RDT_RESOURCE_L3);
+       struct rdt_mon_domain *d;
+       struct rdtgroup *rdtgrp;
+       struct mon_evt *mevt;
+       int ret = 0;
+       bool sep;
+
+       rdtgrp = rdtgroup_kn_lock_live(of->kn);
+       if (!rdtgrp) {
+               ret = -ENOENT;
+               goto out_unlock;
+       }
+
+       rdt_last_cmd_clear();
+       if (!resctrl_arch_mbm_cntr_assign_enabled(r)) {
+               rdt_last_cmd_puts("mbm_event counter assignment mode is not enabled\n");
+               ret = -EINVAL;
+               goto out_unlock;
+       }
+
+       for_each_mon_event(mevt) {
+               if (mevt->rid != r->rid || !mevt->enabled || !resctrl_is_mbm_event(mevt->evtid))
+                       continue;
+
+               sep = false;
+               seq_printf(s, "%s:", mevt->name);
+               list_for_each_entry(d, &r->mon_domains, hdr.list) {
+                       if (sep)
+                               seq_putc(s, ';');
+
+                       if (mbm_cntr_get(r, d, rdtgrp, mevt->evtid) < 0)
+                               seq_printf(s, "%d=_", d->hdr.id);
+                       else
+                               seq_printf(s, "%d=e", d->hdr.id);
+
+                       sep = true;
+               }
+               seq_putc(s, '\n');
+       }
+
+out_unlock:
+       rdtgroup_kn_unlock(of->kn);
+
+       return ret;
+}
+
 /**
  * resctrl_mon_resource_init() - Initialise global monitoring structures.
  *
@@ -1512,6 +1560,7 @@ int resctrl_mon_resource_init(void)
                resctrl_file_fflags_init("event_filter", RFTYPE_ASSIGN_CONFIG);
                resctrl_file_fflags_init("mbm_assign_on_mkdir", RFTYPE_MON_INFO |
                                         RFTYPE_RES_CACHE);
+               resctrl_file_fflags_init("mbm_L3_assignments", RFTYPE_MON_BASE);
        }
 
        return 0;
index 48f98146c09962d716664d07dc642a014ef39458..519aa6acef5b24a2b1a178c861df84e98e70a0c9 100644 (file)
@@ -1937,6 +1937,12 @@ static struct rftype res_common_files[] = {
                .seq_show       = event_filter_show,
                .write          = event_filter_write,
        },
+       {
+               .name           = "mbm_L3_assignments",
+               .mode           = 0444,
+               .kf_ops         = &rdtgroup_kf_single_ops,
+               .seq_show       = mbm_L3_assignments_show,
+       },
        {
                .name           = "mbm_assign_mode",
                .mode           = 0444,