Re: [PATCH 10/24] x86/resctrl: Move the schema names into struct resctrl_schema

From: Reinette Chatre
Date: Tue Nov 17 2020 - 18:11:25 EST


Hi James,

On 10/30/2020 9:11 AM, James Morse wrote:
Move the names used for the schemata file out of the resource and
into struct resctrl_schema. This allows one resource to have two
different names, based on the other schema properties.

This patch copies the names, eventually resctrl will generate them.

Please remove "This patch".


Remove the arch code's max_name_width, this is now resctrl's
problem.

Signed-off-by: James Morse <james.morse@xxxxxxx>
---
arch/x86/kernel/cpu/resctrl/core.c | 9 ++-------
arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 10 +++-------
arch/x86/kernel/cpu/resctrl/internal.h | 2 +-
arch/x86/kernel/cpu/resctrl/rdtgroup.c | 17 ++++++++++++-----
include/linux/resctrl.h | 7 +++++++
5 files changed, 25 insertions(+), 20 deletions(-)

diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
index 1ed5e04031e6..cda071009fed 100644
--- a/arch/x86/kernel/cpu/resctrl/core.c
+++ b/arch/x86/kernel/cpu/resctrl/core.c
@@ -37,10 +37,10 @@ DEFINE_MUTEX(rdtgroup_mutex);
DEFINE_PER_CPU(struct resctrl_pqr_state, pqr_state);
/*
- * Used to store the max resource name width and max resource data width
+ * Used to store the max resource data width
* to display the schemata in a tabular format
*/
-int max_name_width, max_data_width;
+int max_data_width;
/*
* Global boolean for rdt_alloc which is true if any
@@ -776,13 +776,8 @@ static int resctrl_offline_cpu(unsigned int cpu)
static __init void rdt_init_padding(void)
{
struct rdt_resource *r;
- int cl;
for_each_alloc_capable_rdt_resource(r) {
- cl = strlen(r->name);
- if (cl > max_name_width)
- max_name_width = cl;
-
if (r->data_width > max_data_width)
max_data_width = r->data_width;
}

The original code determines the maximum width based on resources supported by the platform.

diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
index a65ff53394ed..28d69c78c29e 100644
--- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
+++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c

...

@@ -391,7 +389,7 @@ static void show_doms(struct seq_file *s, struct resctrl_schema *schema, int clo
bool sep = false;
u32 ctrl_val;
- seq_printf(s, "%*s:", max_name_width, r->name);
+ seq_printf(s, "%*s:", RESCTRL_NAME_LEN, schema->name);

From what I understand this changes what some users will see. In the original code the "max_name_width" is computed based on the maximum length of resources supported. Systems that only support MBA would thus show a schemata of:

MB:0=100;1=100

I expect the above change would change the output to:
MB:0=100;1=100


list_for_each_entry(dom, &r->domains, list) {
hw_dom = resctrl_to_arch_dom(dom);
if (sep)

...


diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
index 8a12f4128209..9f71f0238239 100644
--- a/include/linux/resctrl.h
+++ b/include/linux/resctrl.h
@@ -15,6 +15,11 @@ int proc_resctrl_show(struct seq_file *m,
#endif
+/*
+ * The longest name we expect in the schemata file:
+ */
+#define RESCTRL_NAME_LEN 7
+
enum resctrl_conf_type {
CDP_BOTH,
CDP_CODE,
@@ -172,12 +177,14 @@ struct rdt_resource {
/**
* @list: Member of resctrl's schema list
+ * @names: Name to use in "schemata" file

s/names/name/?

* @conf_type: Type of configuration, e.g. code/data/both
* @res: The rdt_resource for this entry
* @num_closid Number of CLOSIDs available for this resource
*/
struct resctrl_schema {
struct list_head list;
+ char name[RESCTRL_NAME_LEN];
enum resctrl_conf_type conf_type;
struct rdt_resource *res;
u32 num_closid;



Reinette