Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | From | Tony Luck <> | Subject | [PATCH v18 15/17] x86/resctrl: Fix RMID reading sanity check for Sub-NUMA (SNC) mode | Date | Wed, 15 May 2024 15:23:23 -0700 |
| |
The sanity check that RMIDs are being read from a CPU listed in the the cpu_mask for the domain is incorrect when summing across multiple SNC domains. It is safe to read the RMID from any CPU that shares the same L3 cache instance.
Signed-off-by: Tony Luck <tony.luck@intel.com> --- arch/x86/kernel/cpu/resctrl/monitor.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c index 668d2fdf58cd..e4b92c7af71d 100644 --- a/arch/x86/kernel/cpu/resctrl/monitor.c +++ b/arch/x86/kernel/cpu/resctrl/monitor.c @@ -15,6 +15,7 @@ * Software Developer Manual June 2016, volume 3, section 17.17. */ +#include <linux/cacheinfo.h> #include <linux/cpu.h> #include <linux/module.h> #include <linux/sizes.h> @@ -281,8 +282,18 @@ int resctrl_arch_rmid_read(struct rdt_resource *r, struct rdt_mon_domain *d, resctrl_arch_rmid_read_context_check(); - if (!cpumask_test_cpu(smp_processor_id(), &d->hdr.cpu_mask)) - return -EINVAL; + if (r->mon_scope == r->mon_display_scope) { + if (!cpumask_test_cpu(smp_processor_id(), &d->hdr.cpu_mask)) + return -EINVAL; + } else { + /* + * SNC: OK to read events on any CPU sharing same L3 + * cache instance. + */ + if (d->display_id != get_cpu_cacheinfo_id(smp_processor_id(), + r->mon_display_scope)) + return -EINVAL; + } ret = __rmid_read(rmid, eventid, &msr_val); if (ret) -- 2.44.0
| ![\](/images/icornerr.gif) |