All of lore.kernel.org
 help / color / mirror / Atom feed
From: "tip-bot2 for James Morse" <tip-bot2@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: James Morse <james.morse@arm.com>, Borislav Petkov <bp@suse.de>,
	Jamie Iles <jamie@nuviainc.com>,
	Reinette Chatre <reinette.chatre@intel.com>,
	Babu Moger <babu.moger@amd.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: x86/cache] x86/resctrl: Remove rdt_cdp_peer_get()
Date: Wed, 11 Aug 2021 19:41:22 -0000	[thread overview]
Message-ID: <162871088268.395.12682646184865124354.tip-bot2@tip-bot2> (raw)
In-Reply-To: <20210728170637.25610-23-james.morse@arm.com>

The following commit has been merged into the x86/cache branch of tip:

Commit-ID:     fbc06c69805976e1b5c7e6bd0b89c5b0f5282cdf
Gitweb:        https://git.kernel.org/tip/fbc06c69805976e1b5c7e6bd0b89c5b0f5282cdf
Author:        James Morse <james.morse@arm.com>
AuthorDate:    Wed, 28 Jul 2021 17:06:35 
Committer:     Borislav Petkov <bp@suse.de>
CommitterDate: Wed, 11 Aug 2021 18:33:48 +02:00

x86/resctrl: Remove rdt_cdp_peer_get()

When CDP is enabled, rdt_cdp_peer_get() finds the alternative
CODE/DATA resource and returns the alternative domain. This is used
to determine if bitmaps overlap when there are aliased entries
in the two struct rdt_hw_resources.

Now that the ctrl_val[] used by the CODE/DATA resources is the same,
the search for an alternate resource/domain is not needed.

Replace rdt_cdp_peer_get() with resctrl_peer_type(), which returns
the alternative type. This can be passed to resctrl_arch_get_config()
with the same resource and domain.

Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Jamie Iles <jamie@nuviainc.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Tested-by: Babu Moger <babu.moger@amd.com>
Link: https://lkml.kernel.org/r/20210728170637.25610-23-james.morse@arm.com
---
 arch/x86/kernel/cpu/resctrl/rdtgroup.c |  99 +++---------------------
 1 file changed, 14 insertions(+), 85 deletions(-)

diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
index 1f72517..7cf4bf3 100644
--- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
@@ -1092,82 +1092,17 @@ static int rdtgroup_mode_show(struct kernfs_open_file *of,
 	return 0;
 }
 
-/**
- * rdt_cdp_peer_get - Retrieve CDP peer if it exists
- * @r: RDT resource to which RDT domain @d belongs
- * @d: Cache instance for which a CDP peer is requested
- * @r_cdp: RDT resource that shares hardware with @r (RDT resource peer)
- *         Used to return the result.
- * @d_cdp: RDT domain that shares hardware with @d (RDT domain peer)
- *         Used to return the result.
- * @peer_type: The CDP configuration type of the peer resource.
- *
- * RDT resources are managed independently and by extension the RDT domains
- * (RDT resource instances) are managed independently also. The Code and
- * Data Prioritization (CDP) RDT resources, while managed independently,
- * could refer to the same underlying hardware. For example,
- * RDT_RESOURCE_L2CODE and RDT_RESOURCE_L2DATA both refer to the L2 cache.
- *
- * When provided with an RDT resource @r and an instance of that RDT
- * resource @d rdt_cdp_peer_get() will return if there is a peer RDT
- * resource and the exact instance that shares the same hardware.
- *
- * Return: 0 if a CDP peer was found, <0 on error or if no CDP peer exists.
- *         If a CDP peer was found, @r_cdp will point to the peer RDT resource
- *         and @d_cdp will point to the peer RDT domain.
- */
-static int rdt_cdp_peer_get(struct rdt_resource *r, struct rdt_domain *d,
-			    struct rdt_resource **r_cdp,
-			    struct rdt_domain **d_cdp,
-			    enum resctrl_conf_type *peer_type)
+static enum resctrl_conf_type resctrl_peer_type(enum resctrl_conf_type my_type)
 {
-	struct rdt_resource *_r_cdp = NULL;
-	struct rdt_domain *_d_cdp = NULL;
-	int ret = 0;
-
-	switch (r->rid) {
-	case RDT_RESOURCE_L3DATA:
-		_r_cdp = &rdt_resources_all[RDT_RESOURCE_L3CODE].r_resctrl;
-		*peer_type = CDP_CODE;
-		break;
-	case RDT_RESOURCE_L3CODE:
-		_r_cdp =  &rdt_resources_all[RDT_RESOURCE_L3DATA].r_resctrl;
-		*peer_type = CDP_DATA;
-		break;
-	case RDT_RESOURCE_L2DATA:
-		_r_cdp =  &rdt_resources_all[RDT_RESOURCE_L2CODE].r_resctrl;
-		*peer_type = CDP_CODE;
-		break;
-	case RDT_RESOURCE_L2CODE:
-		_r_cdp =  &rdt_resources_all[RDT_RESOURCE_L2DATA].r_resctrl;
-		*peer_type = CDP_DATA;
-		break;
+	switch (my_type) {
+	case CDP_CODE:
+		return CDP_DATA;
+	case CDP_DATA:
+		return CDP_CODE;
 	default:
-		ret = -ENOENT;
-		goto out;
-	}
-
-	/*
-	 * When a new CPU comes online and CDP is enabled then the new
-	 * RDT domains (if any) associated with both CDP RDT resources
-	 * are added in the same CPU online routine while the
-	 * rdtgroup_mutex is held. It should thus not happen for one
-	 * RDT domain to exist and be associated with its RDT CDP
-	 * resource but there is no RDT domain associated with the
-	 * peer RDT CDP resource. Hence the WARN.
-	 */
-	_d_cdp = rdt_find_domain(_r_cdp, d->id, NULL);
-	if (WARN_ON(IS_ERR_OR_NULL(_d_cdp))) {
-		_r_cdp = NULL;
-		_d_cdp = NULL;
-		ret = -EINVAL;
+	case CDP_NONE:
+		return CDP_NONE;
 	}
-
-out:
-	*r_cdp = _r_cdp;
-	*d_cdp = _d_cdp;
-
-	return ret;
 }
 
 /**
@@ -1248,19 +1183,16 @@ static bool __rdtgroup_cbm_overlaps(struct rdt_resource *r, struct rdt_domain *d
 bool rdtgroup_cbm_overlaps(struct resctrl_schema *s, struct rdt_domain *d,
 			   unsigned long cbm, int closid, bool exclusive)
 {
-	enum resctrl_conf_type peer_type;
+	enum resctrl_conf_type peer_type = resctrl_peer_type(s->conf_type);
 	struct rdt_resource *r = s->res;
-	struct rdt_resource *r_cdp;
-	struct rdt_domain *d_cdp;
 
 	if (__rdtgroup_cbm_overlaps(r, d, cbm, closid, s->conf_type,
 				    exclusive))
 		return true;
 
-	if (rdt_cdp_peer_get(r, d, &r_cdp, &d_cdp, &peer_type) < 0)
+	if (!resctrl_arch_get_cdp_enabled(r->rid))
 		return false;
-
-	return  __rdtgroup_cbm_overlaps(r_cdp, d_cdp, cbm, closid, peer_type, exclusive);
+	return  __rdtgroup_cbm_overlaps(r, d, cbm, closid, peer_type, exclusive);
 }
 
 /**
@@ -2756,11 +2688,9 @@ static u32 cbm_ensure_valid(u32 _val, struct rdt_resource *r)
 static int __init_one_rdt_domain(struct rdt_domain *d, struct resctrl_schema *s,
 				 u32 closid)
 {
+	enum resctrl_conf_type peer_type = resctrl_peer_type(s->conf_type);
 	enum resctrl_conf_type t = s->conf_type;
-	struct rdt_resource *r_cdp = NULL;
 	struct resctrl_staged_config *cfg;
-	enum resctrl_conf_type peer_type;
-	struct rdt_domain *d_cdp = NULL;
 	struct rdt_resource *r = s->res;
 	u32 used_b = 0, unused_b = 0;
 	unsigned long tmp_cbm;
@@ -2768,7 +2698,6 @@ static int __init_one_rdt_domain(struct rdt_domain *d, struct resctrl_schema *s,
 	u32 peer_ctl, ctrl_val;
 	int i;
 
-	rdt_cdp_peer_get(r, d, &r_cdp, &d_cdp, &peer_type);
 	cfg = &d->staged_config[t];
 	cfg->have_new_ctrl = false;
 	cfg->new_ctrl = r->cache.shareable_bits;
@@ -2788,8 +2717,8 @@ static int __init_one_rdt_domain(struct rdt_domain *d, struct resctrl_schema *s,
 			 * usage to ensure there is no overlap
 			 * with an exclusive group.
 			 */
-			if (d_cdp)
-				resctrl_arch_get_config(r_cdp, d_cdp, i, peer_type, &peer_ctl);
+			if (resctrl_arch_get_cdp_enabled(r->rid))
+				resctrl_arch_get_config(r, d, i, peer_type, &peer_ctl);
 			else
 				peer_ctl = 0;
 			resctrl_arch_get_config(r, d, i, s->conf_type, &ctrl_val);

  reply	other threads:[~2021-08-11 19:41 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-28 17:06 [PATCH v7 00/24] x86/resctrl: Merge the CDP resources James Morse
2021-07-28 17:06 ` [PATCH v7 01/24] x86/resctrl: Split struct rdt_resource James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 02/24] x86/resctrl: Split struct rdt_domain James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 03/24] x86/resctrl: Add a separate schema list for resctrl James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 04/24] x86/resctrl: Pass the schema in info dir's private pointer James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 05/24] x86/resctrl: Label the resources with their configuration type James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 06/24] x86/resctrl: Walk the resctrl schema list instead of an arch list James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 07/24] x86/resctrl: Store the effective num_closid in the schema James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 08/24] x86/resctrl: Add resctrl_arch_get_num_closid() James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 09/24] x86/resctrl: Pass the schema to resctrl filesystem functions James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 10/24] x86/resctrl: Swizzle rdt_resource and resctrl_schema in pseudo_lock_region James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 11/24] x86/resctrl: Add a helper to read/set the CDP configuration James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 12/24] x86/resctrl: Move the schemata names into struct resctrl_schema James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 13/24] x86/resctrl: Group staged configuration into a separate struct James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 14/24] x86/resctrl: Allow different CODE/DATA configurations to be staged James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 15/24] x86/resctrl: Rename update_domains() resctrl_arch_update_domains() James Morse
2021-08-11 19:41   ` [tip: x86/cache] x86/resctrl: Rename update_domains() to resctrl_arch_update_domains() tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 16/24] x86/resctrl: Add a helper to read a closid's configuration James Morse
2021-08-11 15:50   ` Borislav Petkov
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 17/24] x86/resctrl: Pass configuration type to resctrl_arch_get_config() James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 18/24] x86/resctrl: Make ctrlval arrays the same size James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 19/24] x86/resctrl: Apply offset correction when config is staged James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 20/24] x86/resctrl: Calculate the index from the configuration type James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 21/24] x86/resctrl: Merge the ctrl_val arrays James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 22/24] x86/resctrl: Remove rdt_cdp_peer_get() James Morse
2021-08-11 19:41   ` tip-bot2 for James Morse [this message]
2021-07-28 17:06 ` [PATCH v7 23/24] x86/resctrl: Expand resctrl_arch_update_domains()'s msr_param range James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-07-28 17:06 ` [PATCH v7 24/24] x86/resctrl: Merge the CDP resources James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-08-11 16:38 ` [PATCH v7 25/24] x86/resctrl: Make resctrl_arch_get_config() return its value James Morse
2021-08-11 19:41   ` [tip: x86/cache] " tip-bot2 for James Morse
2021-09-17 16:59 ` [PATCH] x86/resctrl: Fix kfree() of the wrong type in domain_add_cpu() James Morse
2021-09-21 19:04   ` Reinette Chatre
2021-10-04 16:47   ` [tip: x86/urgent] " tip-bot2 for James Morse
2021-10-06 17:39   ` tip-bot2 for James Morse
2021-09-17 16:59 ` [PATCH] x86/resctrl: Free the ctrlval arrays when domain_setup_mon_state() fails James Morse
2021-09-21 19:03   ` Reinette Chatre
2021-10-04 16:47   ` [tip: x86/urgent] " tip-bot2 for James Morse
2021-10-06 17:39   ` tip-bot2 for James Morse

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=162871088268.395.12682646184865124354.tip-bot2@tip-bot2 \
    --to=tip-bot2@linutronix.de \
    --cc=babu.moger@amd.com \
    --cc=bp@suse.de \
    --cc=james.morse@arm.com \
    --cc=jamie@nuviainc.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=reinette.chatre@intel.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.