Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp1406273pxx; Fri, 30 Oct 2020 09:14:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxR1R1PNJQSLKu9I1QOAUp9v2kilPlTeuB4i1iiV5zWZEIYSoDuf0cRkSuJagSukdf4otSM X-Received: by 2002:a50:d616:: with SMTP id x22mr3178553edi.221.1604074453957; Fri, 30 Oct 2020 09:14:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1604074453; cv=none; d=google.com; s=arc-20160816; b=lnkMu+EFsrFcQciYXh7rJrSSxfHwy+uDQg349FKG9MkynwZz9BAlkkt+cvnZlYjDeL VX5DREo5ERoKYvXAdrT6+Gg+eg/aQ296L8Rn1lKhw96KtGrn9khPM74rNYoiY+C9ofNt /H9LtBky5Y210qqTK4V3APOX76lk8KQAX+igEgR/8gb7TDov4KZW1QNomfXwssLavU5q j1VDkV8xR59K0l4Ze0LKhl0Jas7FDybOhlPO+01qfpx7rmnpu5iNsrrgJImzkw7YK41x ky2Ptd/qXvD1X1TXTrpjZ0lB98zMMnDoYruX6cBLvLucTywEgS31kemxaMR6Cz63ldl1 ID+g== 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=iBiBG7N6cymM52j1SKaylvEz1FwOawo0PDKg1f2s0xo=; b=NCGnIGcQZmRrINYFPlnncM4MowdslP8+alYCUkg3irorbN2bzis0ht/1olMC5ENqtB WgFBicZ0jsnUtdfrgxJmMmhH7/rmJnMv/HFZKNJ9hPrqjV2O5d09ipMKcD0+ZD9kkmP8 FQPSsIqBAmE2+TelzN5FGuzJHhfasr4u1EXbHloOGJZLcSceAyTaRQa+1QiPOJzh6YCp WOxsJRSgBIVfkZ4/3PFkBMNe2Fy4QAChIqLXMiHVa6DkMOuIEwbL064aH70oVKaaouoA Tvy4qEJN6tZbGa1KcJDqbM69jbB/DTTAlJ/iN6tO5KMPbZamvb5RmyaOCLzCGRNwLV4P Z+Fg== 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 f5si4265427ejk.374.2020.10.30.09.13.50; Fri, 30 Oct 2020 09:14:13 -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 S1726792AbgJ3QMV (ORCPT + 99 others); Fri, 30 Oct 2020 12:12:21 -0400 Received: from foss.arm.com ([217.140.110.172]:38862 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726708AbgJ3QMT (ORCPT ); Fri, 30 Oct 2020 12:12:19 -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 33622150C; Fri, 30 Oct 2020 09:12:19 -0700 (PDT) Received: from eglon.eretz (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 537E13F719; Fri, 30 Oct 2020 09:12: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 , shameerali.kolothum.thodi@huawei.com, Jamie Iles , D Scott Phillips OS , James Morse Subject: [PATCH 03/24] x86/resctrl: Add resctrl_arch_get_num_closid() Date: Fri, 30 Oct 2020 16:10:59 +0000 Message-Id: <20201030161120.227225-4-james.morse@arm.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201030161120.227225-1-james.morse@arm.com> References: <20201030161120.227225-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 chooses whether to enable CDP, once it does, half the number of closid are available. MPAM doesn't behave like this, an in-kernel user of MPAM could be 'using CDP' while resctrl is not. To move the 'half the closids' behaviour to be part of the core code, each schema would have a num_closids. This may be different from the single resources num_closid if CDP is in use. Add a helper to read the resource's num_closid, this should return the number of closid that the resource supports, regardless of whether CDP is in use. For now return the hw_res->num_closid, which is already adjusted for CDP. Once the CODE/DATA/BOTH resources are merged, resctrl can make the adjustment when copying the value to the schema's num_closid. Signed-off-by: James Morse --- arch/x86/kernel/cpu/resctrl/core.c | 5 +++++ arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 9 +++------ arch/x86/kernel/cpu/resctrl/rdtgroup.c | 14 +++++--------- include/linux/resctrl.h | 3 +++ 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c index 97040a54cc9a..5d5b566c4359 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -443,6 +443,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/ctrlmondata.c b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c index 2e7466659af3..14ea6a40993f 100644 --- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c +++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c @@ -286,12 +286,11 @@ int update_domains(struct rdt_resource *r, int closid) static int rdtgroup_parse_resource(char *resname, char *tok, struct rdtgroup *rdtgrp) { - struct rdt_hw_resource *hw_res; struct rdt_resource *r; for_each_alloc_enabled_rdt_resource(r) { - hw_res = resctrl_to_arch_res(r); - if (!strcmp(resname, r->name) && rdtgrp->closid < hw_res->num_closid) + if (!strcmp(resname, r->name) && + rdtgrp->closid < resctrl_arch_get_num_closid(r)) return parse_line(tok, r, rdtgrp); } rdt_last_cmd_printf("Unknown or unsupported resource name '%s'\n", resname); @@ -400,7 +399,6 @@ static void show_doms(struct seq_file *s, struct rdt_resource *r, int closid) int rdtgroup_schemata_show(struct kernfs_open_file *of, struct seq_file *s, void *v) { - struct rdt_hw_resource *hw_res; struct rdtgroup *rdtgrp; struct rdt_resource *r; int ret = 0; @@ -425,8 +423,7 @@ int rdtgroup_schemata_show(struct kernfs_open_file *of, } else { closid = rdtgrp->closid; for_each_alloc_enabled_rdt_resource(r) { - hw_res = resctrl_to_arch_res(r); - if (closid < hw_res->num_closid) + if (closid < resctrl_arch_get_num_closid(r)) show_doms(s, r, closid); } } diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c index b55861ff4e34..df10135f021e 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -100,15 +100,13 @@ int closids_supported(void) static void closid_init(void) { - struct rdt_hw_resource *hw_res; + u32 rdt_min_closid = 32; struct rdt_resource *r; - int rdt_min_closid = 32; /* Compute rdt_min_closid across all resources */ - for_each_alloc_enabled_rdt_resource(r) { - hw_res = resctrl_to_arch_res(r); - rdt_min_closid = min(rdt_min_closid, hw_res->num_closid); - } + for_each_alloc_enabled_rdt_resource(r) + rdt_min_closid = min(rdt_min_closid, + resctrl_arch_get_num_closid(r)); closid_free_map = BIT_MASK(rdt_min_closid) - 1; @@ -847,10 +845,8 @@ static int rdt_num_closids_show(struct kernfs_open_file *of, struct seq_file *seq, void *v) { struct rdt_resource *r = of->kn->parent->priv; - struct rdt_hw_resource *hw_res; - hw_res = resctrl_to_arch_res(r); - seq_printf(seq, "%d\n", hw_res->num_closid); + seq_printf(seq, "%d\n", resctrl_arch_get_num_closid(r)); return 0; } diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index f5af59b8f2a9..dfb0f32b73a1 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -163,4 +163,7 @@ struct rdt_resource { }; +/* 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.28.0