Hi Tony, Regarding subject and change: Why is the focus on just monitor.c? Hardcoding of RDT_RESOURCE_L3 as monitoring resource is done elsewhere also (rdtgroup.c:rdt_get_tree()) - why not treat all hardcoding? On 7/13/2023 9:32 AM, Tony Luck wrote: ... > @@ -759,9 +761,9 @@ static struct mon_evt mbm_local_event = { > /* > * Initialize the event list for the resource. > * > - * Note that MBM events are also part of RDT_RESOURCE_L3 resource > - * because as per the SDM the total and local memory bandwidth > - * are enumerated as part of L3 monitoring. > + * Monitor events can either be part of RDT_RESOURCE_L3 resource, > + * or they may be per NUMA node on systems with sub-NUMA cluster > + * enabled and are then in the RDT_RESOURCE_NODE resource. > */ > static void l3_mon_evt_init(struct rdt_resource *r) > { > @@ -773,6 +775,8 @@ static void l3_mon_evt_init(struct rdt_resource *r) > list_add_tail(&mbm_total_event.list, &r->evt_list); > if (is_mbm_local_enabled()) > list_add_tail(&mbm_local_event.list, &r->evt_list); > + > + mon_resource = r; > } > This does not seem like the right place for this initialization. mon_evt_init() has a single job that the function comment clearly states: "Initialize the event list for the resource". What does the global mon_resource have to do with the event list? Would get_rdt_mon_resources() not be more appropriate? Although, looking ahead it is not clear to me why this is needed. I'll try to focus my responses to the individual patches in this regard. > int __init rdt_get_mon_l3_config(struct rdt_resource *r) Reinette