Hi Reinette, On 10/15/24 22:22, Reinette Chatre wrote: > Hi Babu, > > On 10/9/24 10:39 AM, Babu Moger wrote: >> mbm_cntr_assign feature provides an option to the user to assign a counter >> to an RMID, event pair and monitor the bandwidth as long as the counter is >> assigned. There can be two counters per monitor group, one for MBM total >> event and another for MBM local event. >> >> Introduce cntr_id to manage the assignments. >> >> Signed-off-by: Babu Moger <babu.moger@xxxxxxx> >> --- >> v8: Minor commit message update. >> >> v7: Minor comment update for cntr_id. >> >> v6: New patch. >> Separated FS and arch bits. >> --- >> arch/x86/kernel/cpu/resctrl/internal.h | 7 +++++++ >> arch/x86/kernel/cpu/resctrl/rdtgroup.c | 6 ++++++ >> 2 files changed, 13 insertions(+) >> >> diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h >> index de397468b945..58298db9034f 100644 >> --- a/arch/x86/kernel/cpu/resctrl/internal.h >> +++ b/arch/x86/kernel/cpu/resctrl/internal.h >> @@ -62,6 +62,11 @@ >> /* Setting bit 0 in L3_QOS_EXT_CFG enables the ABMC feature. */ >> #define ABMC_ENABLE_BIT 0 >> >> +/* Maximum assignable counters per resctrl group */ >> +#define MAX_CNTRS 2 >> + >> +#define MON_CNTR_UNSET U32_MAX >> + >> /** >> * cpumask_any_housekeeping() - Choose any CPU in @mask, preferring those that >> * aren't marked nohz_full >> @@ -231,12 +236,14 @@ enum rdtgrp_mode { >> * @parent: parent rdtgrp >> * @crdtgrp_list: child rdtgroup node list >> * @rmid: rmid for this rdtgroup >> + * @cntr_id: IDs of hardware counters assigned to monitor group >> */ >> struct mongroup { >> struct kernfs_node *mon_data_kn; >> struct rdtgroup *parent; >> struct list_head crdtgrp_list; >> u32 rmid; >> + u32 cntr_id[MAX_CNTRS]; >> }; >> >> /** >> diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c >> index 610eae64b13a..03b670b95c49 100644 >> --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c >> +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c >> @@ -3530,6 +3530,9 @@ static int mkdir_rdt_prepare_rmid_alloc(struct rdtgroup *rdtgrp) >> } >> rdtgrp->mon.rmid = ret; >> >> + rdtgrp->mon.cntr_id[0] = MON_CNTR_UNSET; >> + rdtgrp->mon.cntr_id[1] = MON_CNTR_UNSET; >> + >> ret = mkdir_mondata_all(rdtgrp->kn, rdtgrp, &rdtgrp->mon.mon_data_kn); >> if (ret) { >> rdt_last_cmd_puts("kernfs subdir error\n"); >> @@ -4084,6 +4087,9 @@ static void __init rdtgroup_setup_default(void) >> rdtgroup_default.closid = RESCTRL_RESERVED_CLOSID; >> rdtgroup_default.mon.rmid = RESCTRL_RESERVED_RMID; >> rdtgroup_default.type = RDTCTRL_GROUP; >> + rdtgroup_default.mon.cntr_id[0] = MON_CNTR_UNSET; >> + rdtgroup_default.mon.cntr_id[1] = MON_CNTR_UNSET; >> + > > Could these magic constants be avoided by introducing MBM_EVENT_ARRAY_INDEX here > and using it for the array index instead of "0" and "1"? Sure. Will do. > >> INIT_LIST_HEAD(&rdtgroup_default.mon.crdtgrp_list); >> >> list_add(&rdtgroup_default.rdtgroup_list, &rdt_all_groups); > > Reinette > > > -- Thanks Babu Moger