Messages in this thread Patch in this message | | | From | James Morse <> | Subject | [PATCH 06/24] x86/resctrl: Store the effective num_closid in the schema | Date | Fri, 30 Oct 2020 16:11:02 +0000 |
| |
resctrl_schema holds properties that vary with the style of configuration that resctrl applies to a resource.
Once the arch code has a single resource per cache that can be configured, resctrl will need to keep track of the num_closid itself.
Add num_closid to resctrl_schema. Change callers like rdtgroup_schemata_show() to walk the schema instead.
Signed-off-by: James Morse <james.morse@arm.com> --- arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 13 ++++++++----- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 11 +++++------ include/linux/resctrl.h | 2 ++ 3 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c index 14ea6a40993f..8ac104c634fe 100644 --- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c +++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c @@ -286,11 +286,12 @@ int update_domains(struct rdt_resource *r, int closid) static int rdtgroup_parse_resource(char *resname, char *tok, struct rdtgroup *rdtgrp) { + struct resctrl_schema *s; struct rdt_resource *r; - for_each_alloc_enabled_rdt_resource(r) { - if (!strcmp(resname, r->name) && - rdtgrp->closid < resctrl_arch_get_num_closid(r)) + list_for_each_entry(s, &resctrl_all_schema, list) { + r = s->res; + if (!strcmp(resname, r->name) && rdtgrp->closid < s->num_closid) return parse_line(tok, r, rdtgrp); } rdt_last_cmd_printf("Unknown or unsupported resource name '%s'\n", resname); @@ -399,6 +400,7 @@ 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 resctrl_schema *schema; struct rdtgroup *rdtgrp; struct rdt_resource *r; int ret = 0; @@ -422,8 +424,9 @@ int rdtgroup_schemata_show(struct kernfs_open_file *of, } } else { closid = rdtgrp->closid; - for_each_alloc_enabled_rdt_resource(r) { - if (closid < resctrl_arch_get_num_closid(r)) + list_for_each_entry(schema, &resctrl_all_schema, list) { + r = schema->res; + if (closid < schema->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 cb16454a6b0e..1bd785b1920c 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -103,13 +103,12 @@ int closids_supported(void) static void closid_init(void) { + struct resctrl_schema *s; u32 rdt_min_closid = 32; - struct rdt_resource *r; /* Compute rdt_min_closid across all resources */ - for_each_alloc_enabled_rdt_resource(r) - rdt_min_closid = min(rdt_min_closid, - resctrl_arch_get_num_closid(r)); + list_for_each_entry(s, &resctrl_all_schema, list) + rdt_min_closid = min(rdt_min_closid, s->num_closid); closid_free_map = BIT_MASK(rdt_min_closid) - 1; @@ -848,9 +847,8 @@ static int rdt_num_closids_show(struct kernfs_open_file *of, struct seq_file *seq, void *v) { struct resctrl_schema *s = of->kn->parent->priv; - struct rdt_resource *r = s->res; - seq_printf(seq, "%d\n", resctrl_arch_get_num_closid(r)); + seq_printf(seq, "%d\n", s->num_closid); return 0; } @@ -2142,6 +2140,7 @@ static int create_schemata_list(void) return -ENOMEM; s->res = r; + s->num_closid = resctrl_arch_get_num_closid(r); INIT_LIST_HEAD(&s->list); list_add(&s->list, &resctrl_all_schema); diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index de6cbc725753..b32152968bca 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -166,10 +166,12 @@ struct rdt_resource { /** * @list: Member of resctrl's schema list * @res: The rdt_resource for this entry + * @num_closid Number of CLOSIDs available for this resource */ struct resctrl_schema { struct list_head list; struct rdt_resource *res; + u32 num_closid; }; /* The number of closid supported by this resource regardless of CDP */ -- 2.28.0
| |