Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp5415147pxv; Wed, 28 Jul 2021 10:09:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzOqbO75ldDAlWfCP5+QoN3yJ5iVMiLY+OC7HmGQS5a0zkwMgOe6XhjFsV7foKG9QcDPVR6 X-Received: by 2002:a6b:c98e:: with SMTP id z136mr336242iof.110.1627492174894; Wed, 28 Jul 2021 10:09:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627492174; cv=none; d=google.com; s=arc-20160816; b=kmzkXmDMghp2QPNPBASKBJgQmnhpbmtiDsle4OiDlmmlbHQuLlMmpy4ylLka4pp+0Y KOTA6nroEKzIgRY3TfIUJ5dcWOvEwNBILPcNysGNed6cnpkiNl/vvrghPFkyIwoX0XRF bNz2P8xkhQu6jKg4CyYbo5X5SDvIt/LVARmBSZWljMeMS4Z39aTSjHKNRfHhHnMAhHWz 12+cBhSo6fcgLpppuAGcXMu5cW+cGRO31TrsO8oZUCU5QteHBblDnAEt+A5/rFYFiI4O cklbZW3FEA0oEzh+6OVuAMAXU6g9/YmqFivJH7+uEK+Un8L3p4NryQjuBGBihlx1oqXM 8mDQ== 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=F8zDsWl2zPAfVP5kcBJRu3FPQS9m87o/Sw3luSMgNaM=; b=w8V3mbBBjw+67+D7yMR9EZIE8eq0vmwdf+3R0/BlV/Jgod05/gjDiPAcOE/yArFuMT Y0ibid56Q8pzepVd3++vY9Zcuc7ur1PS67KrE9AnJ9kbR9Ie3rxEKMWqhIGaWjKQF9JG zyqnc7S9RiB3qDX1mRIXts9RTK+cVsuoJ045yR2Y2wp0gmBZPdC1eiCZ2gQjiHm8DklA zuaxQvCzISqSxkbcY0lE83CxzuHhMXBo9qH/eiciYNg/PK3PW/l12SCMOi+Qut50kGqg W1rqOzcbIIJHpiEn1Zu7Y5yTeaxtr0+i0eZvCsZWs/6latx8PVVTwgm0wKmkvhyZjlHX ykFQ== 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 z9si450642jat.41.2021.07.28.10.09.23; Wed, 28 Jul 2021 10:09:34 -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 S231273AbhG1RIN (ORCPT + 99 others); Wed, 28 Jul 2021 13:08:13 -0400 Received: from foss.arm.com ([217.140.110.172]:33220 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231366AbhG1RIF (ORCPT ); Wed, 28 Jul 2021 13:08:05 -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 9F1EFD6E; Wed, 28 Jul 2021 10:08:03 -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 ADFC93F66F; Wed, 28 Jul 2021 10:08:01 -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 , lcherian@marvell.com, bobo.shaobowang@huawei.com Subject: [PATCH v7 08/24] x86/resctrl: Add resctrl_arch_get_num_closid() Date: Wed, 28 Jul 2021 17:06:21 +0000 Message-Id: <20210728170637.25610-9-james.morse@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210728170637.25610-1-james.morse@arm.com> References: <20210728170637.25610-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 To initialise struct resctrl_schema's num_closid, schemata_list_create() reaches into the architectures private structure to retrieve num_closid from the struct rdt_hw_resource. The 'half the closids' behaviour should be part of the filesystem parts of resctrl that are the same on any architecture. struct resctrl_schema's num_closid should include any correction for CDP. Having two properties called num_closid is likely to be confusing when they have different values. Add a helper to read the resource's num_closid from the arch code. This should return the number of closid that the resource supports, regardless of whether CDP is in use. Once the CDP resources are merged, schemata_list_create() can apply the correction itself. Using a type with an obvious size for the arch helper means changing the type of num_closid to u32, which matches the type already used by struct rdtgroup. reset_all_ctrls() does not use resctrl_arch_get_num_closid(), even though it sets up a structure for modifying the hardware. This function will be part of the architecture code, the maximum closid should be the maximum value the hardware has, regardless of the way resctrl is using it. All the uses of num_closid in core.c are naturally part of the architecture specific code. Reviewed-by: Jamie Iles Reviewed-by: Reinette Chatre Tested-by: Babu Moger Signed-off-by: James Morse --- Changes since v3: * Fixed a spelling mistake, removed four spaces. Changes since v2: * Added comment in rdt_hw_resource * Shuffled commit message, Changes since v1: * Rewrote commit message * Whitespace fixes * num_closid becomes u32 in all occurrences to reduce surprises --- arch/x86/kernel/cpu/resctrl/core.c | 5 +++++ arch/x86/kernel/cpu/resctrl/internal.h | 8 ++++++-- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 4 ++-- include/linux/resctrl.h | 6 +++++- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c index c5b5c7227837..26e8d20cd072 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -450,6 +450,11 @@ struct rdt_domain *get_domain_from_cpu(int cpu, struct rdt_resource *r) return NULL; } +u32 resctrl_arch_get_num_closid(struct rdt_resource *r) +{ + return resctrl_to_arch_res(r)->num_closid; +} + void rdt_ctrl_update(void *arg) { struct msr_param *m = arg; diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h index 5e4a0a8d743c..c4bc5fae5a29 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -371,7 +371,11 @@ struct rdt_parse_data { * struct rdt_hw_resource - arch private attributes of a resctrl resource * @conf_type: The type that should be used when configuring. temporary * @r_resctrl: Attributes of the resource used directly by resctrl. - * @num_closid: Maximum number of closid this hardware can support. + * @num_closid: Maximum number of closid this hardware can support, + * regardless of CDP. This is exposed via + * resctrl_arch_get_num_closid() to avoid confusion + * with struct resctrl_schema's property of the same name, + * which has been corrected for features like CDP. * @msr_base: Base MSR address for CBMs * @msr_update: Function pointer to update QOS MSRs * @mon_scale: cqm counter * mon_scale = occupancy in bytes @@ -384,7 +388,7 @@ struct rdt_parse_data { struct rdt_hw_resource { enum resctrl_conf_type conf_type; struct rdt_resource r_resctrl; - int num_closid; + u32 num_closid; unsigned int msr_base; void (*msr_update) (struct rdt_domain *d, struct msr_param *m, struct rdt_resource *r); diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c index 2f29b7d7d602..09ffe9a4a32b 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -104,7 +104,7 @@ int closids_supported(void) static void closid_init(void) { struct resctrl_schema *s; - int rdt_min_closid = 32; + u32 rdt_min_closid = 32; /* Compute rdt_min_closid across all resources */ list_for_each_entry(s, &resctrl_schema_all, list) @@ -2134,7 +2134,7 @@ static int schemata_list_create(void) s->res = r; s->conf_type = resctrl_to_arch_res(r)->conf_type; - s->num_closid = resctrl_to_arch_res(r)->num_closid; + s->num_closid = resctrl_arch_get_num_closid(r); INIT_LIST_HEAD(&s->list); list_add(&s->list, &resctrl_schema_all); diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index 59d0fa78bb69..b9d200592e54 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -180,6 +180,10 @@ struct resctrl_schema { struct list_head list; enum resctrl_conf_type conf_type; struct rdt_resource *res; - int num_closid; + u32 num_closid; }; + +/* The number of closid supported by this resource regardless of CDP */ +u32 resctrl_arch_get_num_closid(struct rdt_resource *r); + #endif /* _RESCTRL_H */ -- 2.30.2