Hi Babu, On 11/4/2022 1:00 PM, Babu Moger wrote: > Add a new field in mon_evt to support Bandwidth Monitoring Event > Configuration(BMEC) and also update the "mon_features" display. > > The sysfs file "mon_features" will display the monitor configuration sysfs -> resctrl ? > if supported. This is not clear. "mon_features" does not display the monitor configuration, it displays the name of the file that can be used to see the monitor configuration. > > 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@xxxxxxx> > --- > arch/x86/kernel/cpu/resctrl/internal.h | 2 ++ > arch/x86/kernel/cpu/resctrl/monitor.c | 6 ++++++ > arch/x86/kernel/cpu/resctrl/rdtgroup.c | 5 ++++- > 3 files changed, 12 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h > index e30e8b23f6b5..5459b5022760 100644 > --- a/arch/x86/kernel/cpu/resctrl/internal.h > +++ b/arch/x86/kernel/cpu/resctrl/internal.h > @@ -63,11 +63,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; > }; > > diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c > index efe0c30d3a12..06c2dc980855 100644 > --- a/arch/x86/kernel/cpu/resctrl/monitor.c > +++ b/arch/x86/kernel/cpu/resctrl/monitor.c > @@ -750,6 +750,7 @@ int rdt_get_mon_l3_config(struct rdt_resource *r) > { > unsigned int mbm_offset = boot_cpu_data.x86_cache_mbm_width_offset; > struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r); > + bool mon_configurable = rdt_cpu_has(X86_FEATURE_BMEC); > unsigned int threshold; > int ret; > > @@ -783,6 +784,11 @@ int rdt_get_mon_l3_config(struct rdt_resource *r) > if (ret) > return ret; > > + if (mon_configurable) { > + mbm_total_event.configurable = true; > + mbm_local_event.configurable = true; > + } > + Is the local variable needed? Why not just: if (rdt_cpu_has(X86_FEATURE_BMEC)) Reinette