Hi Babu, On 7/25/25 11:29 AM, Babu Moger wrote: > When supported, "mbm_event" counter assignment mode offers "num_mbm_cntrs" > number of counters that can be assigned to RMID, event pairs and monitor > bandwidth usage as long as it is assigned. > > Add the functionality to allocate and assign a counter to an RMID, event > pair in the domain. > > If all the counters are in use, kernel will log the error message I think dropping "kernel will" will help the text to be imperative. > "Failed to allocate counter for <event> in domain <id>" in > /sys/fs/resctrl/info/last_cmd_status when a new assignment is requested. "when a new assignment is requested" can be dropped. Or alternatively: Log the error message "Failed to allocate counter for <event> in domain <id>" in /sys/fs/resctrl/info/last_cmd_status if all the counters are in use. > Exit on the first failure when assigning counters across all the domains. > > Signed-off-by: Babu Moger <babu.moger@xxxxxxx> > --- ... > --- > fs/resctrl/internal.h | 3 + > fs/resctrl/monitor.c | 130 ++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 133 insertions(+) > > diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h > index db3a0f12ad77..419423bdabdc 100644 > --- a/fs/resctrl/internal.h > +++ b/fs/resctrl/internal.h > @@ -387,6 +387,9 @@ bool closid_allocated(unsigned int closid); > > int resctrl_find_cleanest_closid(void); > > +int rdtgroup_assign_cntr_event(struct rdt_mon_domain *d, struct rdtgroup *rdtgrp, > + struct mon_evt *mevt); > + This internal.h change does not look necessary? Looking ahead this is because rdtgroup.c:rdtgroup_assign_cntrs() needs it, but rdtgroup_assign_cntrs() also belongs in monitor.c, no? > #ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK > int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp); > ... > +/* > + * rdtgroup_alloc_assign_cntr() - Allocate a counter ID and assign it to the event > + * pointed to by @mevt and the resctrl group @rdtgrp within the domain @d. > + * > + * Return: > + * 0 on success, < 0 on failure. > + */ > +static int rdtgroup_alloc_assign_cntr(struct rdt_resource *r, struct rdt_mon_domain *d, > + struct rdtgroup *rdtgrp, struct mon_evt *mevt) > +{ > + int cntr_id; > + > + /* No action required if the counter is assigned already. */ > + cntr_id = mbm_cntr_get(r, d, rdtgrp, mevt->evtid); > + if (cntr_id >= 0) > + return 0; > + > + cntr_id = mbm_cntr_alloc(r, d, rdtgrp, mevt->evtid); > + if (cntr_id < 0) { Extra space above. > + rdt_last_cmd_printf("Failed to allocate counter for %s in domain %d\n", > + mevt->name, d->hdr.id); > + return cntr_id; > + } > + > + rdtgroup_assign_cntr(r, d, mevt->evtid, rdtgrp->mon.rmid, rdtgrp->closid, cntr_id, true); > + > + return 0; > +} > + Reinette