mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 16:52:18 +00:00
x86/resctrl: Add write option to "mba_MBps_event" file
The "mba_MBps" mount option provides an alternate method to control memory bandwidth. Instead of specifying allowable bandwidth as a percentage of maximum possible, the user provides a MiB/s limit value. There is a file in each CTRL_MON group directory that shows the event currently in use. Allow writing that file to choose a different event. A user can choose any of the memory bandwidth monitoring events listed in /sys/fs/resctrl/info/L3_mon/mon_features independently for each CTRL_MON group by writing to each of the "mba_MBps_event" files. Signed-off-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Reinette Chatre <reinette.chatre@intel.com> Tested-by: Babu Moger <babu.moger@amd.com> Link: https://lore.kernel.org/r/20241206163148.83828-8-tony.luck@intel.com
This commit is contained in:
parent
f5cd0e316f
commit
8e931105ac
@ -518,6 +518,46 @@ static int smp_mon_event_count(void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
ssize_t rdtgroup_mba_mbps_event_write(struct kernfs_open_file *of,
|
||||
char *buf, size_t nbytes, loff_t off)
|
||||
{
|
||||
struct rdtgroup *rdtgrp;
|
||||
int ret = 0;
|
||||
|
||||
/* Valid input requires a trailing newline */
|
||||
if (nbytes == 0 || buf[nbytes - 1] != '\n')
|
||||
return -EINVAL;
|
||||
buf[nbytes - 1] = '\0';
|
||||
|
||||
rdtgrp = rdtgroup_kn_lock_live(of->kn);
|
||||
if (!rdtgrp) {
|
||||
rdtgroup_kn_unlock(of->kn);
|
||||
return -ENOENT;
|
||||
}
|
||||
rdt_last_cmd_clear();
|
||||
|
||||
if (!strcmp(buf, "mbm_local_bytes")) {
|
||||
if (is_mbm_local_enabled())
|
||||
rdtgrp->mba_mbps_event = QOS_L3_MBM_LOCAL_EVENT_ID;
|
||||
else
|
||||
ret = -EINVAL;
|
||||
} else if (!strcmp(buf, "mbm_total_bytes")) {
|
||||
if (is_mbm_total_enabled())
|
||||
rdtgrp->mba_mbps_event = QOS_L3_MBM_TOTAL_EVENT_ID;
|
||||
else
|
||||
ret = -EINVAL;
|
||||
} else {
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
if (ret)
|
||||
rdt_last_cmd_printf("Unsupported event id '%s'\n", buf);
|
||||
|
||||
rdtgroup_kn_unlock(of->kn);
|
||||
|
||||
return ret ?: nbytes;
|
||||
}
|
||||
|
||||
int rdtgroup_mba_mbps_event_show(struct kernfs_open_file *of,
|
||||
struct seq_file *s, void *v)
|
||||
{
|
||||
|
@ -610,6 +610,8 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of,
|
||||
char *buf, size_t nbytes, loff_t off);
|
||||
int rdtgroup_schemata_show(struct kernfs_open_file *of,
|
||||
struct seq_file *s, void *v);
|
||||
ssize_t rdtgroup_mba_mbps_event_write(struct kernfs_open_file *of,
|
||||
char *buf, size_t nbytes, loff_t off);
|
||||
int rdtgroup_mba_mbps_event_show(struct kernfs_open_file *of,
|
||||
struct seq_file *s, void *v);
|
||||
bool rdtgroup_cbm_overlaps(struct resctrl_schema *s, struct rdt_ctrl_domain *d,
|
||||
|
@ -1952,8 +1952,9 @@ static struct rftype res_common_files[] = {
|
||||
},
|
||||
{
|
||||
.name = "mba_MBps_event",
|
||||
.mode = 0444,
|
||||
.mode = 0644,
|
||||
.kf_ops = &rdtgroup_kf_single_ops,
|
||||
.write = rdtgroup_mba_mbps_event_write,
|
||||
.seq_show = rdtgroup_mba_mbps_event_show,
|
||||
},
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user