Commit-ID: ffb2315fd22c2568747402eecdc581a245a2f5ba Gitweb: https://git.kernel.org/tip/ffb2315fd22c2568747402eecdc581a245a2f5ba Author: Reinette Chatre <reinette.chatre@xxxxxxxxx> AuthorDate: Sat, 15 Sep 2018 14:58:27 -0700 Committer: Thomas Gleixner <tglx@xxxxxxxxxxxxx> CommitDate: Tue, 18 Sep 2018 23:38:07 +0200 x86/intel_rdt: Fix incorrect loop end condition In order to determine a sane default cache allocation for a new CAT/CDP resource group, all resource groups are checked to determine which cache portions are available to share. At this time all possible CLOSIDs that can be supported by the resource is checked. This is problematic if the resource supports more CLOSIDs than another CAT/CDP resource. In this case, the number of CLOSIDs that could be allocated are fewer than the number of CLOSIDs that can be supported by the resource. Limit the check of closids to that what is supported by the system based on the minimum across all resources. Fixes: 95f0b77ef ("x86/intel_rdt: Initialize new resource group with sane defaults") Signed-off-by: Reinette Chatre <reinette.chatre@xxxxxxxxx> Signed-off-by: Fenghua Yu <fenghua.yu@xxxxxxxxx> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: "H Peter Anvin" <hpa@xxxxxxxxx> Cc: "Tony Luck" <tony.luck@xxxxxxxxx> Cc: "Xiaochen Shen" <xiaochen.shen@xxxxxxxxx> Cc: "Chen Yu" <yu.c.chen@xxxxxxxxx> Link: https://lkml.kernel.org/r/1537048707-76280-10-git-send-email-fenghua.yu@xxxxxxxxx --- arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c index f3231f78d69b..1b8e86a5d5e1 100644 --- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c +++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c @@ -2370,7 +2370,7 @@ static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp) d->new_ctrl = r->cache.shareable_bits; used_b = r->cache.shareable_bits; ctrl = d->ctrl_val; - for (i = 0; i < r->num_closid; i++, ctrl++) { + for (i = 0; i < closids_supported(); i++, ctrl++) { if (closid_allocated(i) && i != closid) { mode = rdtgroup_mode_by_closid(i); if (mode == RDT_MODE_PSEUDO_LOCKSETUP)