From: James Morse <james.morse@arm.com>
To: x86@kernel.org, linux-kernel@vger.kernel.org
Cc: Fenghua Yu <fenghua.yu@intel.com>,
Reinette Chatre <reinette.chatre@intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
H Peter Anvin <hpa@zytor.com>, Babu Moger <Babu.Moger@amd.com>,
James Morse <james.morse@arm.com>,
shameerali.kolothum.thodi@huawei.com,
Jamie Iles <jamie@nuviainc.com>,
D Scott Phillips OS <scott@os.amperecomputing.com>,
lcherian@marvell.com
Subject: [PATCH v4 06/24] x86/resctrl: Walk the resctrl schema list instead of an arch list
Date: Mon, 14 Jun 2021 20:09:23 +0000 [thread overview]
Message-ID: <20210614200941.12383-7-james.morse@arm.com> (raw)
In-Reply-To: <20210614200941.12383-1-james.morse@arm.com>
When parsing a schema configuration value from user-space, resctrl
walks the architectures rdt_resources_all[] array to find a
matching struct rdt_resource.
Once the CDP resources are merged there will be one resource in
use by two schema. Anything walking rdt_resources_all[] on behalf
of a user-space request should walk the list of struct resctrl_schema
instead.
Change the users of for_each_alloc_enabled_rdt_resource() to walk
the schema instead. Schema were only created for alloc_enabled resources
so these two lists are currently equivalent.
schemata_list_create() and rdt_kill_sb() are ignored. The first
creates the schema list, and will eventually loop over the resource
indexes using an arch helper to retrieve the resource. rdt_kill_sb()
will eventually make use of an arch 'reset everything' helper.
After the filesystem code is moved, rdtgroup_pseudo_locked_in_hierarchy()
remains part of the x86 specific hooks to support pseudo lock. This code
walks each domain, and still does this after the separate resources are
merged.
Reviewed-by: Jamie Iles <jamie@nuviainc.com>
Signed-off-by: James Morse <james.morse@arm.com>
---
Changes since v3:
* No one can spell pseudo
Changes since v2:
* Shuffled commit message,
Changes since v1:
* Expanded commit message
* Split from a larger patch
---
arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 23 +++++++++++++++--------
arch/x86/kernel/cpu/resctrl/rdtgroup.c | 18 ++++++++++++------
2 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
index 2e7466659af3..a6f9548a8a59 100644
--- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
+++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
@@ -287,10 +287,12 @@ static int rdtgroup_parse_resource(char *resname, char *tok,
struct rdtgroup *rdtgrp)
{
struct rdt_hw_resource *hw_res;
+ struct resctrl_schema *s;
struct rdt_resource *r;
- for_each_alloc_enabled_rdt_resource(r) {
- hw_res = resctrl_to_arch_res(r);
+ list_for_each_entry(s, &resctrl_schema_all, list) {
+ r = s->res;
+ hw_res = resctrl_to_arch_res(s->res);
if (!strcmp(resname, r->name) && rdtgrp->closid < hw_res->num_closid)
return parse_line(tok, r, rdtgrp);
}
@@ -301,6 +303,7 @@ static int rdtgroup_parse_resource(char *resname, char *tok,
ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of,
char *buf, size_t nbytes, loff_t off)
{
+ struct resctrl_schema *s;
struct rdtgroup *rdtgrp;
struct rdt_domain *dom;
struct rdt_resource *r;
@@ -331,8 +334,8 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of,
goto out;
}
- for_each_alloc_enabled_rdt_resource(r) {
- list_for_each_entry(dom, &r->domains, list)
+ list_for_each_entry(s, &resctrl_schema_all, list) {
+ list_for_each_entry(dom, &s->res->domains, list)
dom->have_new_ctrl = false;
}
@@ -353,7 +356,8 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of,
goto out;
}
- for_each_alloc_enabled_rdt_resource(r) {
+ list_for_each_entry(s, &resctrl_schema_all, list) {
+ r = s->res;
ret = update_domains(r, rdtgrp->closid);
if (ret)
goto out;
@@ -401,6 +405,7 @@ int rdtgroup_schemata_show(struct kernfs_open_file *of,
struct seq_file *s, void *v)
{
struct rdt_hw_resource *hw_res;
+ struct resctrl_schema *schema;
struct rdtgroup *rdtgrp;
struct rdt_resource *r;
int ret = 0;
@@ -409,8 +414,10 @@ int rdtgroup_schemata_show(struct kernfs_open_file *of,
rdtgrp = rdtgroup_kn_lock_live(of->kn);
if (rdtgrp) {
if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) {
- for_each_alloc_enabled_rdt_resource(r)
+ list_for_each_entry(schema, &resctrl_schema_all, list) {
+ r = schema->res;
seq_printf(s, "%s:uninitialized\n", r->name);
+ }
} else if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED) {
if (!rdtgrp->plr->d) {
rdt_last_cmd_clear();
@@ -424,8 +431,8 @@ 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);
+ list_for_each_entry(schema, &resctrl_schema_all, list) {
+ hw_res = resctrl_to_arch_res(schema->res);
if (closid < hw_res->num_closid)
show_doms(s, r, closid);
}
diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
index 199b3035dfbf..aad891d691e0 100644
--- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
@@ -104,12 +104,12 @@ int closids_supported(void)
static void closid_init(void)
{
struct rdt_hw_resource *hw_res;
- struct rdt_resource *r;
+ struct resctrl_schema *s;
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);
+ list_for_each_entry(s, &resctrl_schema_all, list) {
+ hw_res = resctrl_to_arch_res(s->res);
rdt_min_closid = min(rdt_min_closid, hw_res->num_closid);
}
@@ -1276,11 +1276,13 @@ static bool rdtgroup_mode_test_exclusive(struct rdtgroup *rdtgrp)
{
struct rdt_hw_domain *hw_dom;
int closid = rdtgrp->closid;
+ struct resctrl_schema *s;
struct rdt_resource *r;
bool has_cache = false;
struct rdt_domain *d;
- for_each_alloc_enabled_rdt_resource(r) {
+ list_for_each_entry(s, &resctrl_schema_all, list) {
+ r = s->res;
if (r->rid == RDT_RESOURCE_MBA)
continue;
has_cache = true;
@@ -1418,6 +1420,7 @@ unsigned int rdtgroup_cbm_to_size(struct rdt_resource *r,
static int rdtgroup_size_show(struct kernfs_open_file *of,
struct seq_file *s, void *v)
{
+ struct resctrl_schema *schema;
struct rdt_hw_domain *hw_dom;
struct rdtgroup *rdtgrp;
struct rdt_resource *r;
@@ -1449,7 +1452,8 @@ static int rdtgroup_size_show(struct kernfs_open_file *of,
goto out;
}
- for_each_alloc_enabled_rdt_resource(r) {
+ list_for_each_entry(schema, &resctrl_schema_all, list) {
+ r = schema->res;
sep = false;
seq_printf(s, "%*s:", max_name_width, r->name);
list_for_each_entry(d, &r->domains, list) {
@@ -2815,10 +2819,12 @@ static void rdtgroup_init_mba(struct rdt_resource *r)
/* Initialize the RDT group's allocations. */
static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp)
{
+ struct resctrl_schema *s;
struct rdt_resource *r;
int ret;
- for_each_alloc_enabled_rdt_resource(r) {
+ list_for_each_entry(s, &resctrl_schema_all, list) {
+ r = s->res;
if (r->rid == RDT_RESOURCE_MBA) {
rdtgroup_init_mba(r);
} else {
--
2.30.2
next prev parent reply other threads:[~2021-06-14 20:10 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-14 20:09 [PATCH v4 00/24] x86/resctrl: Merge the CDP resources James Morse
2021-06-14 20:09 ` [PATCH v4 01/24] x86/resctrl: Split struct rdt_resource James Morse
2021-06-15 18:07 ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 02/24] x86/resctrl: Split struct rdt_domain James Morse
2021-06-15 17:51 ` Babu Moger
2021-06-17 17:02 ` James Morse
2021-06-15 18:07 ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 03/24] x86/resctrl: Add a separate schema list for resctrl James Morse
2021-06-15 17:51 ` Babu Moger
2021-06-17 17:02 ` James Morse
2021-06-14 20:09 ` [PATCH v4 04/24] x86/resctrl: Pass the schema in info dir's private pointer James Morse
2021-06-14 20:09 ` [PATCH v4 05/24] x86/resctrl: Label the resources with their configuration type James Morse
2021-06-15 18:08 ` Reinette Chatre
2021-06-14 20:09 ` James Morse [this message]
2021-06-14 20:09 ` [PATCH v4 07/24] x86/resctrl: Store the effective num_closid in the schema James Morse
2021-06-14 20:09 ` [PATCH v4 08/24] x86/resctrl: Add resctrl_arch_get_num_closid() James Morse
2021-06-14 20:09 ` [PATCH v4 09/24] x86/resctrl: Pass the schema to resctrl filesystem functions James Morse
2021-06-15 18:08 ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 10/24] x86/resctrl: Swizzle rdt_resource and resctrl_schema in pseudo_lock_region James Morse
2021-06-14 20:09 ` [PATCH v4 11/24] x86/resctrl: Move the schemata names into struct resctrl_schema James Morse
2021-06-15 18:08 ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 12/24] x86/resctrl: Group staged configuration into a separate struct James Morse
2021-06-15 18:08 ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 13/24] x86/resctrl: Allow different CODE/DATA configurations to be staged James Morse
2021-06-14 20:09 ` [PATCH v4 14/24] x86/resctrl: Rename update_domains() resctrl_arch_update_domains() James Morse
2021-06-14 20:09 ` [PATCH v4 15/24] x86/resctrl: Add a helper to read a closid's configuration James Morse
2021-06-14 20:09 ` [PATCH v4 16/24] x86/resctrl: Add a helper to read/set the CDP configuration James Morse
2021-06-14 20:09 ` [PATCH v4 17/24] x86/resctrl: Pass configuration type to resctrl_arch_get_config() James Morse
2021-06-14 20:09 ` [PATCH v4 18/24] x86/resctrl: Make ctrlval arrays the same size James Morse
2021-06-15 18:09 ` Reinette Chatre
2021-06-17 17:03 ` James Morse
2021-06-14 20:09 ` [PATCH v4 19/24] x86/resctrl: Apply offset correction when config is staged James Morse
2021-06-14 20:09 ` [PATCH v4 20/24] x86/resctrl: Calculate the index from the configuration type James Morse
2021-06-14 20:09 ` [PATCH v4 21/24] x86/resctrl: Merge the ctrl_val arrays James Morse
2021-06-14 20:09 ` [PATCH v4 22/24] x86/resctrl: Remove rdt_cdp_peer_get() James Morse
2021-06-14 20:09 ` [PATCH v4 23/24] x86/resctrl: Expand resctrl_arch_update_domains()'s msr_param range James Morse
2021-06-14 20:09 ` [PATCH v4 24/24] x86/resctrl: Merge the CDP resources James Morse
2021-06-15 16:16 ` [PATCH v4 00/24] " Reinette Chatre
2021-06-15 16:48 ` James Morse
2021-06-15 17:25 ` Borislav Petkov
2021-06-15 18:05 ` Reinette Chatre
2021-06-17 17:03 ` James Morse
2021-06-15 17:50 ` Babu Moger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210614200941.12383-7-james.morse@arm.com \
--to=james.morse@arm.com \
--cc=Babu.Moger@amd.com \
--cc=bp@alien8.de \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=jamie@nuviainc.com \
--cc=lcherian@marvell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=reinette.chatre@intel.com \
--cc=scott@os.amperecomputing.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).