Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1760903pxj; Wed, 19 May 2021 13:17:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwAX6xsY3SwEOdANZi+mHMKMTb+FQm3GzTHi9S+9Py1u1zBA62z9fOZjNNyDYQhPB+rx4yt X-Received: by 2002:a6b:b48a:: with SMTP id d132mr1477682iof.167.1621455475576; Wed, 19 May 2021 13:17:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621455475; cv=none; d=google.com; s=arc-20160816; b=eEcJNpezbUH4CPq4oMADWHVAP0vMLRNXrQCNtw19ySNdS9x54B+CMVR6dEf8ds3yHZ Q5RykhnJ2Bqer0M+Y0/k9hABIloC4EeycObRITtgYKoafh5+3l3ztf3N3MibTUDirxQv scNtruJ0492+gdqMqHcdHVzdM6Nn7s1DRYGZnFusdk9XOz7/9udRiMGCLmCCEBjZgozw jK9e4gce9R6Bqnk4I1mIMTFJStqruShdsRnRsYZzbE+IHCnPVHzxJ1igfGn6Flr9MsLz o4LsZBplI59pFrQtrG5ACMzrlAUIMsDmmHAwh2F/9J48LBP2cRcRWTOfYB9OCB7ohZ5U Zvvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=aApCxKPjTZBqojRRm5lI1ydbzBeXFagt46PfP1v/vNc=; b=iSrSL9tl98XkE4Iw5YxqgoG5TkdbYgiTRosq5h8DFEvUH3+l2c5f3vc+RyD+LbuwKj nut70Y40aeYI4eXvqOVwGTJKsoTA9hoHdUBs/SzOGS71gG1N2QUDRbtokn+KJjzjZwtm 6dr32O6vWHzSUBIC9N2Pg292x+Q0291VnAfB0c3vodrOJSxffWNqvKrzcIZoD+b/NtsQ U/SD5RDCxW3UDNDXc+zsJ1fls+JKn1OfLIXgU7Ga47cUO6nhiuXl0iWGQ4TXovCr5iLl csJq0YClR4K1th1Vun79m2u1PHEnHuno+wQl47I5Jp8rgbhT+x/MG7EVQDCLebDOf8F6 AuLw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a7si333684jat.120.2021.05.19.13.17.31; Wed, 19 May 2021 13:17:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1355441AbhESQ15 (ORCPT + 99 others); Wed, 19 May 2021 12:27:57 -0400 Received: from foss.arm.com ([217.140.110.172]:48516 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1355295AbhESQ1M (ORCPT ); Wed, 19 May 2021 12:27:12 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DB24316F8; Wed, 19 May 2021 09:25:51 -0700 (PDT) Received: from merodach.members.linode.com (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2B7EF3F73D; Wed, 19 May 2021 09:25:50 -0700 (PDT) From: James Morse To: x86@kernel.org, linux-kernel@vger.kernel.org Cc: Fenghua Yu , Reinette Chatre , Thomas Gleixner , Ingo Molnar , Borislav Petkov , H Peter Anvin , Babu Moger , James Morse , shameerali.kolothum.thodi@huawei.com, Jamie Iles , D Scott Phillips OS Subject: [PATCH v3 20/24] x86/resctrl: Calculate the index from the configuration type Date: Wed, 19 May 2021 16:24:20 +0000 Message-Id: <20210519162424.27654-21-james.morse@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210519162424.27654-1-james.morse@arm.com> References: <20210519162424.27654-1-james.morse@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org resctrl uses cbm_idx() to map a closid to an index in the configuration array. This is based on a multiplier and offset that are held in the resource. To merge the resources, the resctrl arch code needs to calculate the index from something else, as there will only be one resource. Decide based on the staged configuration type. This makes the static mult and offset parameters redundant. Reviewed-by: Jamie Iles Signed-off-by: James Morse --- Changes since v2: * Shuffled commit message, arch/x86/kernel/cpu/resctrl/core.c | 12 ----------- arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 25 ++++++++++++++--------- include/linux/resctrl.h | 6 ------ 3 files changed, 15 insertions(+), 28 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c index 15b57f70564b..08603487cb7d 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -69,8 +69,6 @@ struct rdt_hw_resource rdt_resources_all[] = { .cache_level = 3, .cache = { .min_cbm_bits = 1, - .cbm_idx_mult = 1, - .cbm_idx_offset = 0, }, .domains = domain_init(RDT_RESOURCE_L3), .parse_ctrlval = parse_cbm, @@ -89,8 +87,6 @@ struct rdt_hw_resource rdt_resources_all[] = { .cache_level = 3, .cache = { .min_cbm_bits = 1, - .cbm_idx_mult = 2, - .cbm_idx_offset = 0, }, .domains = domain_init(RDT_RESOURCE_L3DATA), .parse_ctrlval = parse_cbm, @@ -109,8 +105,6 @@ struct rdt_hw_resource rdt_resources_all[] = { .cache_level = 3, .cache = { .min_cbm_bits = 1, - .cbm_idx_mult = 2, - .cbm_idx_offset = 1, }, .domains = domain_init(RDT_RESOURCE_L3CODE), .parse_ctrlval = parse_cbm, @@ -129,8 +123,6 @@ struct rdt_hw_resource rdt_resources_all[] = { .cache_level = 2, .cache = { .min_cbm_bits = 1, - .cbm_idx_mult = 1, - .cbm_idx_offset = 0, }, .domains = domain_init(RDT_RESOURCE_L2), .parse_ctrlval = parse_cbm, @@ -149,8 +141,6 @@ struct rdt_hw_resource rdt_resources_all[] = { .cache_level = 2, .cache = { .min_cbm_bits = 1, - .cbm_idx_mult = 2, - .cbm_idx_offset = 0, }, .domains = domain_init(RDT_RESOURCE_L2DATA), .parse_ctrlval = parse_cbm, @@ -169,8 +159,6 @@ struct rdt_hw_resource rdt_resources_all[] = { .cache_level = 2, .cache = { .min_cbm_bits = 1, - .cbm_idx_mult = 2, - .cbm_idx_offset = 1, }, .domains = domain_init(RDT_RESOURCE_L2CODE), .parse_ctrlval = parse_cbm, diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c index 360f352ccc4d..e384398374da 100644 --- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c +++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c @@ -246,12 +246,17 @@ static int parse_line(char *line, struct resctrl_schema *s, return -EINVAL; } -static unsigned u32 cbm_idx(struct rdt_resource *r, unsigned int closid) +static u32 get_config_index(u32 closid, enum resctrl_conf_type type) { - if (r->rid == RDT_RESOURCE_MBA) + switch (type) { + default: + case CDP_NONE: return closid; - - return closid * r->cache.cbm_idx_mult + r->cache.cbm_idx_offset; + case CDP_CODE: + return (closid * 2) + 1; + case CDP_DATA: + return (closid * 2); + } } static bool apply_config(struct rdt_hw_domain *hw_dom, @@ -286,10 +291,6 @@ int resctrl_arch_update_domains(struct rdt_resource *r, u32 closid) if (!zalloc_cpumask_var(&cpu_mask, GFP_KERNEL)) return -ENOMEM; - msr_param.low = cbm_idx(r, closid); - msr_param.high = msr_param.low + 1; - msr_param.res = r; - mba_sc = is_mba_sc(r); list_for_each_entry(d, &r->domains, list) { hw_dom = resctrl_to_arch_dom(d); @@ -298,9 +299,13 @@ int resctrl_arch_update_domains(struct rdt_resource *r, u32 closid) if (!cfg->have_new_ctrl) continue; - idx = cbm_idx(r, closid); + idx = get_config_index(closid, t); if (!apply_config(hw_dom, cfg, idx, cpu_mask, mba_sc)) continue; + + msr_param.low = idx; + msr_param.high = msr_param.low + 1; + msr_param.res = r; } } @@ -420,7 +425,7 @@ void resctrl_arch_get_config(struct rdt_resource *r, struct rdt_domain *d, u32 closid, enum resctrl_conf_type type, u32 *value) { struct rdt_hw_domain *hw_dom = resctrl_to_arch_dom(d); - u32 idx = cbm_idx(r, closid); + u32 idx = get_config_index(closid, type); if (!is_mba_sc(r)) *value = hw_dom->ctrl_val[idx]; diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index 7cde6c2b9d16..1b202682f411 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -70,10 +70,6 @@ struct rdt_domain { * struct resctrl_cache - Cache allocation related data * @cbm_len: Length of the cache bit mask * @min_cbm_bits: Minimum number of consecutive bits to be set - * @cbm_idx_mult: Multiplier of CBM index - * @cbm_idx_offset: Offset of CBM index. CBM index is computed by: - * closid * cbm_idx_multi + cbm_idx_offset - * in a cache bit mask * @shareable_bits: Bitmask of shareable resource with other * executing entities * @arch_has_sparse_bitmaps: True if a bitmap like f00f is valid. @@ -84,8 +80,6 @@ struct rdt_domain { struct resctrl_cache { unsigned int cbm_len; unsigned int min_cbm_bits; - unsigned int cbm_idx_mult; // TODO remove this - unsigned int cbm_idx_offset; // TODO remove this unsigned int shareable_bits; bool arch_has_sparse_bitmaps; bool arch_has_empty_bitmaps; -- 2.30.2