> Yes, this is the idea. Thank you for considering it. Something else > to consider that may make this even cleaner/simpler would be to review > struct rdt_domain and struct rdt_hw_domain members for "monitor" vs "control" > usage. These structs could potentially be split further into separate > "control" and "monitor" variants. For example, "struct rdt_domain" split into > "struct rdt_ctrl_domain" and "struct rdt_mon_domain". If there is a clean > split then resctrl can always create two lists with the unnecessary duplication > eliminated when two domain lists are created. This would also > eliminate the need to scatter ctrl_scope == mon_scope checks throughout. You might like what I'm doing in the "resctrl2" re-write[1]. Arch independent code that maintains the domain lists for a resource via a cpuhp notifier just has this for the domain structure: struct resctrl_domain { struct list_head list; struct cpumask cpu_mask; int id; int cache_size; }; Each module managing a resource decides what extra information it wants to carry in the domain. So the above structure is common to all, but it is followed by whatever the resource module wants. E.g. the CBM masks for each CLOSid for the CAT module. The module tells core code the size to allocate. "cache_size" is only there because the cache topology bits needed to discover sizes of caches aren't exported. Both the "size" file and pseudo-locking need to know the size. It's also possible that you may hate it. There is zero sharing of resource structures even if they have the same scope. This is because all modules are independently loadable. -Tony [1] WIP snapshot at git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git branch resctrl2_v65rc1. That doesn't have pseudo-locking, but most of the rest of existing resctrl functionality is there.