The RDT_RESOURCE_L3 is unique in that it is used for both monitoring an control functions. This made sense while both uses had the same scope. But systems with Sub-NUMA clustering enabled do not follow this pattern. Create a new resource: RDT_RESOURCE_L3_MON ready to take over the monitoring functions. Signed-off-by: Tony Luck <tony.luck@xxxxxxxxx> --- arch/x86/kernel/cpu/resctrl/internal.h | 1 + arch/x86/kernel/cpu/resctrl/core.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h index 52e7e7deee10..c6051bc70e96 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -429,6 +429,7 @@ DECLARE_STATIC_KEY_FALSE(rdt_alloc_enable_key); extern struct dentry *debugfs_resctrl; enum resctrl_res_level { + RDT_RESOURCE_L3_MON, RDT_RESOURCE_L3, RDT_RESOURCE_L2, RDT_RESOURCE_MBA, diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c index aa9810a64258..c50f55d7790e 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -60,6 +60,16 @@ mba_wrmsr_amd(struct rdt_domain *d, struct msr_param *m, #define domain_init(id) LIST_HEAD_INIT(rdt_resources_all[id].r_resctrl.domains) struct rdt_hw_resource rdt_resources_all[] = { + [RDT_RESOURCE_L3_MON] = + { + .r_resctrl = { + .rid = RDT_RESOURCE_L3_MON, + .name = "L3", + .cache_level = 3, + .domains = domain_init(RDT_RESOURCE_L3_MON), + .fflags = RFTYPE_RES_CACHE, + }, + }, [RDT_RESOURCE_L3] = { .r_resctrl = { -- 2.43.0