lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240117141405.3063506-4-amitsinght@marvell.com>
Date: Wed, 17 Jan 2024 19:43:54 +0530
From: Amit Singh Tomar <amitsinght@...vell.com>
To: <linux-kernel@...r.kernel.org>, <linux-arm-kernel@...ts.infradead.org>
CC: <fenghua.yu@...el.com>, <reinette.chatre@...el.com>, <james.morse@....com>,
        <gcherian@...vell.com>, <robh@...nel.org>, <peternewman@...gle.com>,
        <dfustini@...libre.com>, <jonathan.cameron@...wei.com>,
        Amit Singh Tomar <amitsinght@...vell.com>
Subject: [PATCH v1 03/14] arm_mpam: resctrl: extend the schemata list to support priority partition

At the moment, "schemata" list is consist of two basic control types .i.e.
cache portion bitmap (CPBM), and memory bandwidth allocation (MBA),
represented as following under schemata file.

MB:0=0100
L3:0=ffff

Lets' extend the "schemata" list to support priority partition control,
This control is listed in following format (last column indicates the
priority value) under schemata file.

L3DSPRI:0=f

Signed-off-by: Amit Singh Tomar <amitsinght@...vell.com>
---
Changes since RFC:
		* This patch is reworked, Now in order to configure DSPRI partition control
                  dedicated schemata is used (L3DSPRI). 
---
 drivers/platform/mpam/mpam_resctrl.c |  7 +++++-
 fs/resctrl/rdtgroup.c                | 34 ++++++++++++++++++++++------
 include/linux/resctrl.h              |  3 +++
 include/linux/resctrl_types.h        |  3 +++
 4 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/drivers/platform/mpam/mpam_resctrl.c b/drivers/platform/mpam/mpam_resctrl.c
index 09618d9ceb1d..6fd2bfeffa0a 100644
--- a/drivers/platform/mpam/mpam_resctrl.c
+++ b/drivers/platform/mpam/mpam_resctrl.c
@@ -729,8 +729,13 @@ static int mpam_resctrl_resource_init(struct mpam_resctrl_res *res)
 			exposed_alloc_capable = true;
 		}
 
-		if (has_ppart)
+		if (has_ppart) {
 			r->priority_cap = true;
+			if (class->props.dspri_wd > 0x10)
+				class->props.dspri_wd = 0x10;
+
+			r->dspri_data_width = (class->props.dspri_wd + 3) / 4;
+		}
 
 		/*
 		 * MBWU counters may be 'local' or 'total' depending on where
diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c
index 12e31d4dddf6..568bb9bb7913 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c
@@ -2261,7 +2261,7 @@ static int schemata_list_add(struct rdt_resource *r,
 				enum resctrl_ctrl_type ctrl_type)
 {
 	struct resctrl_schema *s;
-	const char *suffix = "";
+	const char *suffix = "", *ext_suffix = "";
 	int ret, cl;
 
 	s = kzalloc(sizeof(*s), GFP_KERNEL);
@@ -2286,12 +2286,22 @@ static int schemata_list_add(struct rdt_resource *r,
 		break;
 	}
 
-	if (ctrl_type == SCHEMA_BASIC) {
+	s->ctrl_type = ctrl_type;
+	switch (ctrl_type) {
+	case SCHEMA_DSPRI:
+		ext_suffix = "DSPRI";
+		break;
+	}
+
+	if (ctrl_type == SCHEMA_BASIC)
 		ret = snprintf(s->name, sizeof(s->name), "%s%s", r->name, suffix);
-		if (ret >= sizeof(s->name)) {
-			kfree(s);
-			return -EINVAL;
-		}
+	else
+		ret = snprintf(s->name, sizeof(s->name), "%s%s%s", r->name,
+				suffix, ext_suffix);
+
+	if (ret >= sizeof(s->name)) {
+		kfree(s);
+		return -EINVAL;
 	}
 
 	cl = strlen(s->name);
@@ -2312,7 +2322,9 @@ static int schemata_list_add(struct rdt_resource *r,
 	 * widest cbm/data_width.
 	 */
 	if (ctrl_type == SCHEMA_BASIC)
-		max_data_width = max(max_data_width, r->data_width);
+		s->max_data_width = max(max_data_width, r->data_width);
+	else
+		s->max_data_width = max(max_data_width, r->dspri_data_width);
 
 	INIT_LIST_HEAD(&s->list);
 	list_add(&s->list, &resctrl_schema_all);
@@ -2322,6 +2334,7 @@ static int schemata_list_add(struct rdt_resource *r,
 
 static int schemata_list_create(void)
 {
+	enum resctrl_ctrl_type ctrl_type;
 	enum resctrl_res_level i;
 	struct rdt_resource *r;
 	int ret = 0;
@@ -2345,6 +2358,13 @@ static int schemata_list_create(void)
 		if (ret)
 			break;
 
+		for_each_extend_ctrl_type(ctrl_type) {
+			if (ctrl_type == 1 && r->priority_cap) {
+				ret = schemata_list_add(r, CDP_NONE, SCHEMA_DSPRI);
+				if (ret)
+					break;
+			}
+		}
 	}
 
 	return ret;
diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
index d49aed80a05e..cb17c7704fd7 100644
--- a/include/linux/resctrl.h
+++ b/include/linux/resctrl.h
@@ -205,6 +205,7 @@ struct resctrl_membw {
  * @domains:		RCU list of all domains for this resource
  * @name:		Name to use in "schemata" file.
  * @data_width:		Character width of data when displaying
+ * @dspri_data_width	Character width of dspri value when displaying
  * @default_ctrl:	Specifies default cache cbm or memory B/W percent.
  * @format_str:		Per resource format string to show domain value
  * @evt_list:		List of monitoring events
@@ -223,6 +224,7 @@ struct rdt_resource {
 	struct list_head	domains;
 	char			*name;
 	int			data_width;
+	int                     dspri_data_width;
 	u32			default_ctrl;
 	const char		*format_str;
 	struct list_head	evt_list;
@@ -256,6 +258,7 @@ struct resctrl_schema {
 	enum resctrl_ctrl_type          ctrl_type;
 	struct rdt_resource		*res;
 	u32				num_closid;
+	int                             max_data_width;
 };
 
 /*
diff --git a/include/linux/resctrl_types.h b/include/linux/resctrl_types.h
index b9268ec3ba71..b1a22053d7cd 100644
--- a/include/linux/resctrl_types.h
+++ b/include/linux/resctrl_types.h
@@ -57,6 +57,9 @@ enum resctrl_res_level {
 	RDT_NUM_RESOURCES,
 };
 
+#define for_each_extend_ctrl_type(t)    \
+	for (t = SCHEMA_DSPRI; t != SCHEMA_NUM_CTRL_TYPE; t++)
+
 enum resctrl_ctrl_type {
 	SCHEMA_BASIC = 0,
 	SCHEMA_DSPRI,
-- 
2.25.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ