Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3050716pxj; Mon, 14 Jun 2021 13:12:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwlXvmyVXlCYCIpxPzua2iwCiYxzCh129WQ2FlWH2jZK9q6X3YaXJ4PD9qxho3OeP2SuM8F X-Received: by 2002:aa7:c2c7:: with SMTP id m7mr19193126edp.156.1623701541729; Mon, 14 Jun 2021 13:12:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623701541; cv=none; d=google.com; s=arc-20160816; b=l81w6yqcjwsqjcZJgl/dbvKJ0qtti/cWJfAd8dNLAFgWAPLDp1gTs35sfCYNZeTDDN q02NS5GQn25TjMAmp3tjeEfiPxpWUuRSc3hGS5biu3uZ7z/ohed3DEEvJWQbS3yL6Fp8 ObmBC7lnyWc4qUkuwK9wGWe1blzBOraxb8yuhakk7Kj2wzF51EDEJh7fAdFK/ztQ9Z5j O+z/FCl2jfWyLmXDgk5BMouyg4loCyFc0fKKPQhjh1S7FqK/Nvb7JNv1Fp7vRxEf4qF6 IldOGWdnLMIjUnQ3ztwY6Wkv6Ms+fJwRGHETsb1CnAE1aeJ82uadWJpCiU9f935muPx5 CQNA== 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=rleyWZ87Pm1Vl58F7UTpN/vuMN5Z+yhFKu1I44na0to=; b=tMct/3aloK9IORN1ZOpM8F/CeNXJfILZ8kECT3d+3bvQFBKm4K+AzRhp6TWROfVPDA JEbTiPLym/203fForyQdzowWl6omIEjm7BLDgirQ4v+9mXOJBe+SKpvfsSFJZ/hoRziH NCF7XOruR8Q6CoRe2URR4vaSHNJvPoSw0w2yT6CICg0tKaX2DxSR9/mow4OuX5t9v9rv OnQv2gSYHjHTZbeHDl+g+6r0szGhTM0qPnYkUsuYwJStzwEgcilao9rih/2odAXXkdC2 xdTyrayYVO+QCIGghr+HS5D23pgxNBx04jZmznAXviw2sXOn5p18nsePu3m7kgm9TyV2 1SVg== 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 f22si11998807ejq.458.2021.06.14.13.11.58; Mon, 14 Jun 2021 13:12:21 -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 S235069AbhFNUMY (ORCPT + 99 others); Mon, 14 Jun 2021 16:12:24 -0400 Received: from foss.arm.com ([217.140.110.172]:45504 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234959AbhFNUMM (ORCPT ); Mon, 14 Jun 2021 16:12: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 4C812143D; Mon, 14 Jun 2021 13:10:09 -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 6F1C93F694; Mon, 14 Jun 2021 13:10:07 -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 Subject: [PATCH v4 05/24] x86/resctrl: Label the resources with their configuration type Date: Mon, 14 Jun 2021 20:09:22 +0000 Message-Id: <20210614200941.12383-6-james.morse@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210614200941.12383-1-james.morse@arm.com> References: <20210614200941.12383-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 The names of resources are used for the schema name presented to user-space. The name used is rooted in a structure provided by the architecture code because the names are different when CDP is enabled. x86 implements this by swapping between two sets of resource structures based on their alloc_enabled flag. The type of configuration in-use is encoded in the name (and cbm_idx_offset). Once the CDP behaviour is moved into the parts of resctrl that will move to /fs/, there will be two struct resctrl_schema for one struct rdt_resource. The schema describes the type of configuration being applied to the resource. The name of the schema should be generated by resctrl, base on the type of configuration. To do this struct resctrl_schema needs to store the type of configuration in use for a schema. Create an enum resctrl_conf_type describing the options, and add it to struct resctrl_schema. The underlying resources are still separate, as cbm_idx_offset is still in use. Temporarily label all the entries in rdt_resources_all[] and copy that value to struct resctrl_schema. Copying the value ensures there is no mismatch while the filesystem parts of resctrl are modified to use the schema. Once the resources are merged, the filesystem code can assign this value based on the schema being created. Reviewed-by: Jamie Iles Signed-off-by: James Morse --- Changes since v3: * Removed a space. Changes since v2: * Renamed CDP_BOTH as CDP_NONE and described as 'no prioritisation' * Shuffled commit message, Changes since v1: * {cdp,conf}_type typo * Added kerneldoc comment --- arch/x86/kernel/cpu/resctrl/core.c | 7 +++++++ arch/x86/kernel/cpu/resctrl/internal.h | 2 ++ arch/x86/kernel/cpu/resctrl/rdtgroup.c | 1 + include/linux/resctrl.h | 10 ++++++++++ 4 files changed, 20 insertions(+) diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c index aff5d0dde6c1..9ba12c3d175a 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -62,6 +62,7 @@ mba_wrmsr_amd(struct rdt_domain *d, struct msr_param *m, struct rdt_hw_resource rdt_resources_all[] = { [RDT_RESOURCE_L3] = { + .conf_type = CDP_NONE, .resctrl = { .rid = RDT_RESOURCE_L3, .name = "L3", @@ -81,6 +82,7 @@ struct rdt_hw_resource rdt_resources_all[] = { }, [RDT_RESOURCE_L3DATA] = { + .conf_type = CDP_DATA, .resctrl = { .rid = RDT_RESOURCE_L3DATA, .name = "L3DATA", @@ -100,6 +102,7 @@ struct rdt_hw_resource rdt_resources_all[] = { }, [RDT_RESOURCE_L3CODE] = { + .conf_type = CDP_CODE, .resctrl = { .rid = RDT_RESOURCE_L3CODE, .name = "L3CODE", @@ -119,6 +122,7 @@ struct rdt_hw_resource rdt_resources_all[] = { }, [RDT_RESOURCE_L2] = { + .conf_type = CDP_NONE, .resctrl = { .rid = RDT_RESOURCE_L2, .name = "L2", @@ -138,6 +142,7 @@ struct rdt_hw_resource rdt_resources_all[] = { }, [RDT_RESOURCE_L2DATA] = { + .conf_type = CDP_DATA, .resctrl = { .rid = RDT_RESOURCE_L2DATA, .name = "L2DATA", @@ -157,6 +162,7 @@ struct rdt_hw_resource rdt_resources_all[] = { }, [RDT_RESOURCE_L2CODE] = { + .conf_type = CDP_CODE, .resctrl = { .rid = RDT_RESOURCE_L2CODE, .name = "L2CODE", @@ -176,6 +182,7 @@ struct rdt_hw_resource rdt_resources_all[] = { }, [RDT_RESOURCE_MBA] = { + .conf_type = CDP_NONE, .resctrl = { .rid = RDT_RESOURCE_MBA, .name = "MB", diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h index f6790d03f056..e800de110230 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -364,6 +364,7 @@ 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 * @resctrl: Attributes of the resource used directly by resctrl. * @num_closid: Maximum number of closid this hardware can support. * @msr_base: Base MSR address for CBMs @@ -376,6 +377,7 @@ struct rdt_parse_data { * msr_update and msr_base. */ struct rdt_hw_resource { + enum resctrl_conf_type conf_type; struct rdt_resource resctrl; int num_closid; unsigned int msr_base; diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c index 6ad9df322282..199b3035dfbf 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -2135,6 +2135,7 @@ static int schemata_list_create(void) return -ENOMEM; s->res = r; + s->conf_type = resctrl_to_arch_res(r)->conf_type; 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 425e7913dc8d..81073d0751c9 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -15,6 +15,14 @@ int proc_resctrl_show(struct seq_file *m, #endif +enum resctrl_conf_type { + /* No prioritisation, both code and data are controlled or monitored. */ + CDP_NONE, + + CDP_CODE, + CDP_DATA, +}; + /** * struct rdt_domain - group of CPUs sharing a resctrl resource * @list: all instances of this resource @@ -158,11 +166,13 @@ struct rdt_resource { * struct resctrl_schema - configuration abilities of a resource presented to * user-space * @list: Member of resctrl_schema_all. + * @conf_type: Whether this schema is specific to code/data. * @res: The resource structure exported by the architecture to describe * the hardware that is configured by this schema. */ struct resctrl_schema { struct list_head list; + enum resctrl_conf_type conf_type; struct rdt_resource *res; }; #endif /* _RESCTRL_H */ -- 2.30.2