mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 05:31:17 -04:00
x86/resctrl: Support monitor configuration
Add a new field in struct mon_evt to support Bandwidth Monitoring Event Configuration (BMEC) and also update the "mon_features" display. The resctrl file "mon_features" will display the supported events and files that can be used to configure those events if monitor configuration is supported. Before the change: $ cat /sys/fs/resctrl/info/L3_MON/mon_features llc_occupancy mbm_total_bytes mbm_local_bytes After the change when BMEC is supported: $ cat /sys/fs/resctrl/info/L3_MON/mon_features llc_occupancy mbm_total_bytes mbm_total_bytes_config mbm_local_bytes mbm_local_bytes_config 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/r/20230113152039.770054-9-babu.moger@amd.com
This commit is contained in:
committed by
Borislav Petkov (AMD)
parent
bd334c86b5
commit
d507f83ced
@@ -52,11 +52,13 @@ DECLARE_STATIC_KEY_FALSE(rdt_mon_enable_key);
|
||||
* struct mon_evt - Entry in the event list of a resource
|
||||
* @evtid: event id
|
||||
* @name: name of the event
|
||||
* @configurable: true if the event is configurable
|
||||
* @list: entry in &rdt_resource->evt_list
|
||||
*/
|
||||
struct mon_evt {
|
||||
enum resctrl_event_id evtid;
|
||||
char *name;
|
||||
bool configurable;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
|
||||
@@ -800,6 +800,13 @@ int __init rdt_get_mon_l3_config(struct rdt_resource *r)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (rdt_cpu_has(X86_FEATURE_BMEC)) {
|
||||
if (rdt_cpu_has(X86_FEATURE_CQM_MBM_TOTAL))
|
||||
mbm_total_event.configurable = true;
|
||||
if (rdt_cpu_has(X86_FEATURE_CQM_MBM_LOCAL))
|
||||
mbm_local_event.configurable = true;
|
||||
}
|
||||
|
||||
l3_mon_evt_init(r);
|
||||
|
||||
r->mon_capable = true;
|
||||
|
||||
@@ -998,8 +998,11 @@ static int rdt_mon_features_show(struct kernfs_open_file *of,
|
||||
struct rdt_resource *r = of->kn->parent->priv;
|
||||
struct mon_evt *mevt;
|
||||
|
||||
list_for_each_entry(mevt, &r->evt_list, list)
|
||||
list_for_each_entry(mevt, &r->evt_list, list) {
|
||||
seq_printf(seq, "%s\n", mevt->name);
|
||||
if (mevt->configurable)
|
||||
seq_printf(seq, "%s_config\n", mevt->name);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user