[RFC,06/12] fs/resctrl: Extend schemata read for priority partition control
Commit Message
At present, "schemata" file under resource control group reveals
information about Cache portion bitmap and Memory Bandwidth allocation.
With the introduction of priority partition control "schemata" is updated
to adopt priority value.
Let's enable support for reading the priority values for "schemata" file.
Signed-off-by: Amit Singh Tomar <amitsinght@marvell.com>
---
drivers/platform/mpam/mpam_resctrl.c | 4 ++++
fs/resctrl/ctrlmondata.c | 15 ++++++++++++---
include/linux/resctrl.h | 4 ++++
3 files changed, 20 insertions(+), 3 deletions(-)
@@ -735,7 +735,11 @@ static int mpam_resctrl_resource_init(struct mpam_resctrl_res *res)
if (has_ppart) {
r->priority_cap = true;
+ if (class->props.dspri_wd > 0x10)
+ class->props.dspri_wd = 0x10;
+
r->dspri_default_ctrl = BIT_MASK(class->props.dspri_wd) - 1;
+ r->dspri_data_width = (class->props.dspri_wd + 3) / 4;
}
/*
@@ -379,7 +379,7 @@ static void show_doms(struct seq_file *s, struct resctrl_schema *schema, int clo
struct rdt_resource *r = schema->res;
struct rdt_domain *dom;
bool sep = false;
- u32 ctrl_val;
+ u32 ctrl_val, dspri_ctrl_val;
/* Walking r->domains, ensure it can't race with cpuhp */
lockdep_assert_cpus_held();
@@ -395,9 +395,18 @@ static void show_doms(struct seq_file *s, struct resctrl_schema *schema, int clo
ctrl_val = resctrl_arch_get_config(r, dom, closid,
schema->conf_type);
- seq_printf(s, r->format_str, dom->id, max_data_width,
- ctrl_val);
+ if (r->priority_cap) {
+ r->dspri_show = true;
+ dspri_ctrl_val = resctrl_arch_get_config(r, dom, closid,
+ CDP_NONE);
+ seq_printf(s, r->format_str, dom->id, max_data_width, ctrl_val,
+ r->dspri_data_width, dspri_ctrl_val);
+ } else
+ seq_printf(s, r->format_str, dom->id, max_data_width,
+ ctrl_val);
+
sep = true;
+ r->dspri_show = false;
}
seq_puts(s, "\n");
}
@@ -199,12 +199,14 @@ struct resctrl_membw {
* @mon_capable: Is monitor feature available on this machine
* @priority_capable: Is priority partitioning feature available on this machine
* @dspri_store:
+ * @dspri_show: flag to indicate downstream priority read
* @num_rmid: Number of RMIDs available
* @cache_level: Which cache level defines scope of this resource
* @cache: Cache allocation related data
* @membw: If the component has bandwidth controls, their properties.
* @domains: RCU list of all domains for this resource
* @name: Name to use in "schemata" file.
+ * @dspri_data_width Character width of dspri value when displaying
* @data_width: Character width of data when displaying
* @default_ctrl: Specifies default cache cbm or memory B/W percent.
* @dspri_default_ctrl: Specifies default downstream priority value.
@@ -219,6 +221,7 @@ struct rdt_resource {
bool mon_capable;
bool priority_cap;
bool dspri_store;
+ bool dspri_show;
int num_rmid;
int cache_level;
struct resctrl_cache cache;
@@ -226,6 +229,7 @@ struct rdt_resource {
struct list_head domains;
char *name;
int data_width;
+ int dspri_data_width;
u32 default_ctrl;
u32 dspri_default_ctrl;
const char *format_str;