Hi Babu, On 3/28/2024 6:06 PM, Babu Moger wrote: > If the BMEC (Bandwidth Monitoring Event Configuration) feature is > supported, the bandwidth events can be configured to track specific events. > The event configuration is domain specific. ABMC (Assignable Bandwidth > Monitoring Counters) feature needs event configuration information to > assign RMID to the hardware counter. Currently, this information is not > available. hmmm ... "Currently, this information is not available." does not sound accurate. Perhaps it can be made more specific with something like: "Event configurations are not stored in resctrl but instead always read from or written to hardware directly when prompted by user space." (feel free to improve) > > Save the event configuration information in the rdt_hw_domain, so it can > be used while for RMID assignment. "be used while for RMID assignment" -> "be used for RMID assignment"? > > Signed-off-by: Babu Moger <babu.moger@xxxxxxx> > > --- > v3: Minor changes related to rebase in mbm_config_write_domain. > > v2: No changes. > --- > arch/x86/kernel/cpu/resctrl/core.c | 2 ++ > arch/x86/kernel/cpu/resctrl/internal.h | 3 +++ > arch/x86/kernel/cpu/resctrl/monitor.c | 11 +++++++++++ > arch/x86/kernel/cpu/resctrl/rdtgroup.c | 16 +++++++++++++++- > 4 files changed, 31 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c > index 50e9ec5e547b..ed4f6d49d737 100644 > --- a/arch/x86/kernel/cpu/resctrl/core.c > +++ b/arch/x86/kernel/cpu/resctrl/core.c > @@ -555,6 +555,8 @@ static void domain_add_cpu(int cpu, struct rdt_resource *r) > return; > } > > + arch_domain_mbm_evt_config(hw_dom); > + > list_add_tail_rcu(&d->list, add_pos); > > err = resctrl_online_domain(r, d); > diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h > index 41b06d46ea74..88453c86474b 100644 > --- a/arch/x86/kernel/cpu/resctrl/internal.h > +++ b/arch/x86/kernel/cpu/resctrl/internal.h > @@ -385,6 +385,8 @@ struct rdt_hw_domain { > u32 *ctrl_val; > struct arch_mbm_state *arch_mbm_total; > struct arch_mbm_state *arch_mbm_local; > + u32 mbm_total_cfg; > + u32 mbm_local_cfg; (please fix tabs/spaces) > }; > > static inline struct rdt_hw_domain *resctrl_to_arch_dom(struct rdt_domain *r) > @@ -648,6 +650,7 @@ void __check_limbo(struct rdt_domain *d, bool force_free); > void rdt_domain_reconfigure_cdp(struct rdt_resource *r); > void __init resctrl_file_fflags_init(const char *config, > unsigned long fflags); > +void arch_domain_mbm_evt_config(struct rdt_hw_domain *hw_dom); > void rdt_staged_configs_clear(void); > bool closid_allocated(unsigned int closid); > int resctrl_find_cleanest_closid(void); > diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c > index 56dc49021540..8677dbf6de43 100644 > --- a/arch/x86/kernel/cpu/resctrl/monitor.c > +++ b/arch/x86/kernel/cpu/resctrl/monitor.c > @@ -1090,3 +1090,14 @@ void __init intel_rdt_mbm_apply_quirk(void) > mbm_cf_rmidthreshold = mbm_cf_table[cf_index].rmidthreshold; > mbm_cf = mbm_cf_table[cf_index].cf; > } > + > +void arch_domain_mbm_evt_config(struct rdt_hw_domain *hw_dom) > +{ > + if (mbm_total_event.configurable) > + hw_dom->mbm_total_cfg = MAX_EVT_CONFIG_BITS; > + > + if (mbm_local_event.configurable) > + hw_dom->mbm_local_cfg = READS_TO_LOCAL_MEM | > + NON_TEMP_WRITE_TO_LOCAL_MEM | > + READS_TO_LOCAL_S_MEM; > +} Shouldn't the defaults be discovered from hardware? Reinette