Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp5415908pxv; Wed, 28 Jul 2021 10:10:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzcr0DAKsAAv4WsZmBGbXuolDzLZYKyrPlsr28H0qHFu8bX4HIk4q2/HbeybB4nJxuRJsZX X-Received: by 2002:a17:906:4d94:: with SMTP id s20mr502157eju.152.1627492236451; Wed, 28 Jul 2021 10:10:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627492236; cv=none; d=google.com; s=arc-20160816; b=hVB6OkrHMQxCdW46zqrrQDskC86DS9DWuzFNmwUp8rylc3aliDFGPv7+wnQtaMDnDR Bz8Us9QVdfeBsHUmwdj3y5blArz5/nv7ko5G+5jb4lGHhXMy0GQJfhfXvR9VdU7ro9IN 4sioGtEaHKotjM3mbAE2RdOchh2sXrwpLpW4ErqHrLdgUC+aEsUheP3Ebh7WDIRdmodE 0vUX152CuwSKf5ywwJ7PWxr6/F8FNcuG0ZpR8y+vz9o6w/JdRiC7RZTzS1YgTiEI38OD awZfUioSWmOV2hMTSLi4XVEj3L9hQDKPmgY22MMt8XOm5vhlFqacEjEaeVqZQyz0OdrQ 7DzA== 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=RrAxZqOliQ7c4AKYLtu4mRQ1ZFxNxdBbH7svMqgBFnM=; b=TSZDKRxI27W0k8v32NKyciQ7qs8wk414k8OglgEw9iz/Kz/4yTt7OZHvYqxNzstUSe x9aneiwYDllyhD4eZ1DHGoo7iUp0ZRqfXhM6lSUGU/2Hgf8dpP5mtEn/4KHnw9y6ZXMY LzJM9Z1ZBE/79T/ua4mvIElT9sY5lSwtnOyqm/GZngffMP4uu5cxEoZxcp7Z5pLUo8dE KYETWxRivKX83rNQE5LWXgPzTdYXj+K8gseFWWf4vvXsrajfJkXYtYVqcjHCM7FbLcIk YuXWZ+kef7yaB4z6Vu0Jmgb2Jg248VD7/RZMLJqTInn613w0ZQAhhbmaBFlFclZ1sDkI 3f7g== 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 w17si219437edc.39.2021.07.28.10.10.13; Wed, 28 Jul 2021 10:10:36 -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 S231191AbhG1RIa (ORCPT + 99 others); Wed, 28 Jul 2021 13:08:30 -0400 Received: from foss.arm.com ([217.140.110.172]:33304 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230484AbhG1RIU (ORCPT ); Wed, 28 Jul 2021 13:08:20 -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 0F52B1063; Wed, 28 Jul 2021 10:08:19 -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 1DF903F66F; Wed, 28 Jul 2021 10:08:17 -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 14/24] x86/resctrl: Allow different CODE/DATA configurations to be staged Date: Wed, 28 Jul 2021 17:06:27 +0000 Message-Id: <20210728170637.25610-15-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 Before the CDP resources can be merged, struct rdt_domain will need an array of struct resctrl_staged_config, one per type of configuration. Use the type as an index to the array to ensure that a schema configuration string can't specify the same domain twice. This will allow two schema to apply configuration changes to one resource. Reviewed-by: Jamie Iles Reviewed-by: Reinette Chatre Tested-by: Babu Moger Signed-off-by: James Morse --- Changes since v3: * Add an empty line Changes since v2: * Shuffled commit message, Changes since v1: * Renamed max enum value CDP_NUM_TYPES * Whitespace and parenthesis * Missing word in the commit message --- arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 20 ++++++++++++++------ arch/x86/kernel/cpu/resctrl/rdtgroup.c | 5 +++-- include/linux/resctrl.h | 4 +++- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c index 9ddfa7607234..f29848f98846 100644 --- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c +++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c @@ -60,10 +60,11 @@ static bool bw_validate(char *buf, unsigned long *data, struct rdt_resource *r) int parse_bw(struct rdt_parse_data *data, struct resctrl_schema *s, struct rdt_domain *d) { + struct resctrl_staged_config *cfg; struct rdt_resource *r = s->res; unsigned long bw_val; - struct resctrl_staged_config *cfg = &d->staged_config; + cfg = &d->staged_config[s->conf_type]; if (cfg->have_new_ctrl) { rdt_last_cmd_printf("Duplicate domain %d\n", d->id); return -EINVAL; @@ -130,11 +131,12 @@ static bool cbm_validate(char *buf, u32 *data, struct rdt_resource *r) int parse_cbm(struct rdt_parse_data *data, struct resctrl_schema *s, struct rdt_domain *d) { - struct resctrl_staged_config *cfg = &d->staged_config; struct rdtgroup *rdtgrp = data->rdtgrp; + struct resctrl_staged_config *cfg; struct rdt_resource *r = s->res; u32 cbm_val; + cfg = &d->staged_config[s->conf_type]; if (cfg->have_new_ctrl) { rdt_last_cmd_printf("Duplicate domain %d\n", d->id); return -EINVAL; @@ -192,6 +194,7 @@ int parse_cbm(struct rdt_parse_data *data, struct resctrl_schema *s, static int parse_line(char *line, struct resctrl_schema *s, struct rdtgroup *rdtgrp) { + enum resctrl_conf_type t = s->conf_type; struct resctrl_staged_config *cfg; struct rdt_resource *r = s->res; struct rdt_parse_data data; @@ -222,7 +225,7 @@ static int parse_line(char *line, struct resctrl_schema *s, if (r->parse_ctrlval(&data, s, d)) return -EINVAL; if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { - cfg = &d->staged_config; + cfg = &d->staged_config[t]; /* * In pseudo-locking setup mode and just * parsed a valid CBM that should be @@ -261,6 +264,7 @@ int update_domains(struct rdt_resource *r, int closid) struct resctrl_staged_config *cfg; struct rdt_hw_domain *hw_dom; struct msr_param msr_param; + enum resctrl_conf_type t; cpumask_var_t cpu_mask; struct rdt_domain *d; bool mba_sc; @@ -276,9 +280,13 @@ int update_domains(struct rdt_resource *r, int closid) mba_sc = is_mba_sc(r); list_for_each_entry(d, &r->domains, list) { hw_dom = resctrl_to_arch_dom(d); - cfg = &hw_dom->d_resctrl.staged_config; - if (cfg->have_new_ctrl) + for (t = 0; t < CDP_NUM_TYPES; t++) { + cfg = &hw_dom->d_resctrl.staged_config[t]; + if (!cfg->have_new_ctrl) + continue; + apply_config(hw_dom, cfg, closid, cpu_mask, mba_sc); + } } /* @@ -350,7 +358,7 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of, list_for_each_entry(s, &resctrl_schema_all, list) { list_for_each_entry(dom, &s->res->domains, list) - memset(&dom->staged_config, 0, sizeof(dom->staged_config)); + memset(dom->staged_config, 0, sizeof(dom->staged_config)); } while ((tok = strsep(&buf, "\n")) != NULL) { diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c index 62cc82d7b06e..9f1354cb94e9 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -2751,6 +2751,7 @@ static u32 cbm_ensure_valid(u32 _val, struct rdt_resource *r) static int __init_one_rdt_domain(struct rdt_domain *d, struct resctrl_schema *s, u32 closid) { + enum resctrl_conf_type t = s->conf_type; struct rdt_resource *r_cdp = NULL; struct resctrl_staged_config *cfg; struct rdt_domain *d_cdp = NULL; @@ -2762,7 +2763,7 @@ static int __init_one_rdt_domain(struct rdt_domain *d, struct resctrl_schema *s, int i; rdt_cdp_peer_get(r, d, &r_cdp, &d_cdp); - cfg = &d->staged_config; + cfg = &d->staged_config[t]; cfg->have_new_ctrl = false; cfg->new_ctrl = r->cache.shareable_bits; used_b = r->cache.shareable_bits; @@ -2846,7 +2847,7 @@ static void rdtgroup_init_mba(struct rdt_resource *r) struct rdt_domain *d; list_for_each_entry(d, &r->domains, list) { - cfg = &d->staged_config; + cfg = &d->staged_config[CDP_NONE]; cfg->new_ctrl = is_mba_sc(r) ? MBA_MAX_MBPS : r->default_ctrl; cfg->have_new_ctrl = true; } diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index ff7f7d7e1348..51ba372f96cd 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -27,6 +27,8 @@ enum resctrl_conf_type { CDP_DATA, }; +#define CDP_NUM_TYPES (CDP_DATA + 1) + /** * struct resctrl_staged_config - parsed configuration to be applied * @new_ctrl: new ctrl value to be loaded @@ -64,7 +66,7 @@ struct rdt_domain { int mbm_work_cpu; int cqm_work_cpu; struct pseudo_lock_region *plr; - struct resctrl_staged_config staged_config; + struct resctrl_staged_config staged_config[CDP_NUM_TYPES]; }; /** -- 2.30.2