Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp1461743pxf; Fri, 12 Mar 2021 10:01:28 -0800 (PST) X-Google-Smtp-Source: ABdhPJz2sRZ1yx5IREVHRyGPHpxg09lzJdwunGT5MKom8r6JDcdLW02mioOViHMPjQB1E8IE8Ygi X-Received: by 2002:a17:906:1d55:: with SMTP id o21mr9900997ejh.485.1615572088135; Fri, 12 Mar 2021 10:01:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615572088; cv=none; d=google.com; s=arc-20160816; b=OWNJ+85ppW5FMEsf5sRQyBBWNtpOuQlZg01qWSEaLrghv+mnv7Q76zvRcvRx3J69qc bhCG/llZ/A1xt1V5ojl3JyzUikJ/UI+OpFCq3nIsrcjtkXsL7/5MaSJJ4z1wI9meR+wu lr5F5X3uel/WI0fVZKL+UzMS4i9XjG0hqXwURw2a5Nf0QHkBGblb5KqEFIj0xb6s/vd7 dr8ByC35eWjCH2lE1OJMX2E9foJBuqj6GBt/R7VOOvxCw3J4jmtKWxP0lL3H+5w+RkSS PF1TInqQhZpFUb2wVq1OIW7f3zEzyCLIE+FKappiW0wS2QySG0Zucpp/56ZXCydhmdLR LncQ== 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=LvEOVxhENKPjmk4YqsyzPnK1PEsSduPzt+Zda7i15fA=; b=rrRGg8FkXVEvdyjr2xk1T9kZ1ivtCcBN85jfcuEGX6p2x9yubTEei9/1pz+UNU/ZmB NHYk10V8S/R1hGd43WHV5yl/mdu8eF7w4ltnvx24zGqASIqjff4+/ZWrT52ZWu/ZIwl/ ztNxXQY+xmU9tSROo5pzAWCOa/+9DWAeV1ff12zSwxepRwtLsYgTDiULL2+mD8SLenB6 fjCkvzS9Rjej8r4pLchXCBrtl0vkni8nD/U+taOS5SAQs2LwdPSkzfhF6vRryjkPtzho fsKTtclfJUHaNmU2gal3Tyft32AmkJSNxMbFsOvCvRVL1utK8lC3uWwpyvuSPRuBp/V4 Is7A== 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 d8si4608642edy.246.2021.03.12.10.01.05; Fri, 12 Mar 2021 10:01:28 -0800 (PST) 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 S232802AbhCLSAJ (ORCPT + 99 others); Fri, 12 Mar 2021 13:00:09 -0500 Received: from foss.arm.com ([217.140.110.172]:58446 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232362AbhCLR7x (ORCPT ); Fri, 12 Mar 2021 12:59:53 -0500 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 AB89E1396; Fri, 12 Mar 2021 09:59:52 -0800 (PST) Received: from merodach.members.linode.com (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id DF4E43F7D7; Fri, 12 Mar 2021 09:59:50 -0800 (PST) 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 v2 05/24] x86/resctrl: Label the resources with their configuration type Date: Fri, 12 Mar 2021 17:58:30 +0000 Message-Id: <20210312175849.8327-6-james.morse@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210312175849.8327-1-james.morse@arm.com> References: <20210312175849.8327-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 schemata name presented to user-space. These should be part of the filesystem code that is common to all architectures, as otherwise different architectures could accidentally support different schemata. resctrl should be able to generate 'L3, L3CODE, L3DATA' from the architectures description of a cache at level 3 that supports CDP, creating two separate struct resctrl_schema for the CDP case that share the same resource, but differ in name and configuration type. The configuration type is needed in struct resctrl_schema to generate the name, and as an index into the array of per-domain staged configurations that is added by a later patch. Currently the resources are different for these types, the type is currently encoded in the name, (and cbm_idx_offset). Label all the entries in rdt_resources_all[], and copy that value to struct resctrl_schema. Copying the value ensures there is no mismatch, but allows the filesystem parts of resctrl to be 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 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 | 8 ++++++++ 4 files changed, 18 insertions(+) diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c index ca43a7491fda..048c82e3baca 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_BOTH, .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_BOTH, .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_BOTH, .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 8a9da490134b..57484d2f6214 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -361,12 +361,14 @@ struct rdt_parse_data { /** * struct rdt_hw_resource - hw attributes of a resctrl resource + * @conf_type: The type that should be used when configuring. temporary * @num_closid: Number of CLOSIDs available. * @msr_base: Base MSR address for CBMs * @msr_update: Function pointer to update QOS MSRs * @mon_scale: cqm counter * mon_scale = occupancy in bytes */ 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 92b94d85c689..b5702238797b 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 092ff0c13b9b..c6f749f54765 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -15,6 +15,12 @@ int proc_resctrl_show(struct seq_file *m, #endif +enum resctrl_conf_type { + CDP_BOTH, + CDP_CODE, + CDP_DATA, +}; + /** * struct rdt_domain - group of CPUs sharing a resctrl resource * @list: all instances of this resource @@ -157,10 +163,12 @@ struct rdt_resource { /** * struct resctrl_schema - configuration abilities of a resource presented to user-space * @list: Member of resctrl's schema list + * @conf_type: Whether this entry is for code/data/both * @res: The rdt_resource for this entry */ struct resctrl_schema { struct list_head list; + enum resctrl_conf_type conf_type; struct rdt_resource *res; }; #endif /* _RESCTRL_H */ -- 2.30.0