public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Martin <Dave.Martin@arm.com>
To: x86@kernel.org, linux-kernel@vger.kernel.org
Cc: James Morse <james.morse@arm.com>,
	Fenghua Yu <fenghua.yu@intel.com>,
	Reinette Chatre <reinette.chatre@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	H Peter Anvin <hpa@zytor.com>, Babu Moger <Babu.Moger@amd.com>,
	shameerali.kolothum.thodi@huawei.com,
	D Scott Phillips OS <scott@os.amperecomputing.com>,
	carl@os.amperecomputing.com, lcherian@marvell.com,
	bobo.shaobowang@huawei.com,
	"Shaopeng Tan (Fujitsu)" <tan.shaopeng@fujitsu.com>,
	baolin.wang@linux.alibaba.com,
	Jamie Iles <quic_jiles@quicinc.com>,
	Xin Hao <xhao@linux.alibaba.com>,
	Peter Newman <peternewman@google.com>,
	dfustini@baylibre.com, amitsinght@marvell.com,
	David Hildenbrand <david@redhat.com>,
	Rex Nie <rex.nie@jaguarmicro.com>
Subject: [PATCH v2 13/35] x86/resctrl: Stop using the for_each_*_rdt_resource() walkers
Date: Fri, 26 Apr 2024 16:08:42 +0100	[thread overview]
Message-ID: <20240426150904.8854-13-Dave.Martin@arm.com> (raw)
In-Reply-To: <20240426150904.8854-1-Dave.Martin@arm.com>

From: James Morse <james.morse@arm.com>

The for_each_*_rdt_resource() helpers walk the architecture's array
of structures, using the resctrl visible part as an iterator. These
became over-complex when the structures were split into a
filesystem and architecture-specific struct. This approach avoided
the need to touch every call site.

Once the filesystem parts of resctrl are moved to /fs/, both the
architecture's resource array, and the definition of those structures
is no longer accessible. To support resctrl, each architecture would
have to provide equally complex macros.

Change the resctrl code that uses these to walk through the resource_level
enum and check the mon/alloc capable flags instead. Instances in core.c,
and resctrl_arch_reset_resources() remain part of x86's architecture
specific code.

Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Dave Martin <Dave.Martin@arm.com>

---

Changes in v2:

 * [Whitespace only] Fix bogus whitespace introduced in
   rdtgroup_create_info_dir().

 * [Commit message only] Typo fix:
   s/architectures/architecture's/g
---
 arch/x86/kernel/cpu/resctrl/pseudo_lock.c |  7 +++++-
 arch/x86/kernel/cpu/resctrl/rdtgroup.c    | 28 +++++++++++++++++++----
 2 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c b/arch/x86/kernel/cpu/resctrl/pseudo_lock.c
index 884b88e25141..f2315a50ea4f 100644
--- a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c
+++ b/arch/x86/kernel/cpu/resctrl/pseudo_lock.c
@@ -840,6 +840,7 @@ bool rdtgroup_cbm_overlaps_pseudo_locked(struct rdt_domain *d, unsigned long cbm
 bool rdtgroup_pseudo_locked_in_hierarchy(struct rdt_domain *d)
 {
 	cpumask_var_t cpu_with_psl;
+	enum resctrl_res_level i;
 	struct rdt_resource *r;
 	struct rdt_domain *d_i;
 	bool ret = false;
@@ -854,7 +855,11 @@ bool rdtgroup_pseudo_locked_in_hierarchy(struct rdt_domain *d)
 	 * First determine which cpus have pseudo-locked regions
 	 * associated with them.
 	 */
-	for_each_alloc_capable_rdt_resource(r) {
+	for (i = 0; i < RDT_NUM_RESOURCES; i++) {
+		r = resctrl_arch_get_resource(i);
+		if (!r->alloc_capable)
+			continue;
+
 		list_for_each_entry(d_i, &r->domains, list) {
 			if (d_i->plr)
 				cpumask_or(cpu_with_psl, cpu_with_psl,
diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
index 9d4c8d641615..d678fe2a2142 100644
--- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
@@ -98,12 +98,17 @@ void rdt_last_cmd_printf(const char *fmt, ...)
 
 void rdt_staged_configs_clear(void)
 {
+	enum resctrl_res_level i;
 	struct rdt_resource *r;
 	struct rdt_domain *dom;
 
 	lockdep_assert_held(&rdtgroup_mutex);
 
-	for_each_alloc_capable_rdt_resource(r) {
+	for (i = 0; i < RDT_NUM_RESOURCES; i++) {
+		r = resctrl_arch_get_resource(i);
+		if (!r->alloc_capable)
+			continue;
+
 		list_for_each_entry(dom, &r->domains, list)
 			memset(dom->staged_config, 0, sizeof(dom->staged_config));
 	}
@@ -2179,6 +2184,7 @@ static int rdtgroup_mkdir_info_resdir(void *priv, char *name,
 
 static int rdtgroup_create_info_dir(struct kernfs_node *parent_kn)
 {
+	enum resctrl_res_level i;
 	struct resctrl_schema *s;
 	struct rdt_resource *r;
 	unsigned long fflags;
@@ -2203,7 +2209,11 @@ static int rdtgroup_create_info_dir(struct kernfs_node *parent_kn)
 			goto out_destroy;
 	}
 
-	for_each_mon_capable_rdt_resource(r) {
+	for (i = 0; i < RDT_NUM_RESOURCES; i++) {
+		r = resctrl_arch_get_resource(i);
+		if (!r->mon_capable)
+			continue;
+
 		fflags = r->fflags | RFTYPE_MON_INFO;
 		sprintf(name, "%s_MON", r->name);
 		ret = rdtgroup_mkdir_info_resdir(r, name, fflags);
@@ -2613,10 +2623,15 @@ static int schemata_list_add(struct rdt_resource *r, enum resctrl_conf_type type
 
 static int schemata_list_create(void)
 {
+	enum resctrl_res_level i;
 	struct rdt_resource *r;
 	int ret = 0;
 
-	for_each_alloc_capable_rdt_resource(r) {
+	for (i = 0; i < RDT_NUM_RESOURCES; i++) {
+		r = resctrl_arch_get_resource(i);
+		if (!r->alloc_capable)
+			continue;
+
 		if (resctrl_arch_get_cdp_enabled(r->rid)) {
 			ret = schemata_list_add(r, CDP_CODE);
 			if (ret)
@@ -3165,6 +3180,7 @@ static int mkdir_mondata_all(struct kernfs_node *parent_kn,
 			     struct rdtgroup *prgrp,
 			     struct kernfs_node **dest_kn)
 {
+	enum resctrl_res_level i;
 	struct rdt_resource *r;
 	struct kernfs_node *kn;
 	int ret;
@@ -3183,7 +3199,11 @@ static int mkdir_mondata_all(struct kernfs_node *parent_kn,
 	 * Create the subdirectories for each domain. Note that all events
 	 * in a domain like L3 are grouped into a resource whose domain is L3
 	 */
-	for_each_mon_capable_rdt_resource(r) {
+	for (i = 0; i < RDT_NUM_RESOURCES; i++) {
+		r = resctrl_arch_get_resource(i);
+		if (!r->mon_capable)
+			continue;
+
 		ret = mkdir_mondata_subdir_alldom(kn, r, prgrp);
 		if (ret)
 			goto out_destroy;
-- 
2.34.1


  parent reply	other threads:[~2024-04-26 15:09 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-26 15:05 [PATCH v2 00/35] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl Dave Martin
2024-04-26 15:08 ` [PATCH v2 01/35] x86/resctrl: Fix allocation of cleanest CLOSID on platforms with no monitors Dave Martin
2024-04-26 15:08   ` [PATCH v2 02/35] x86/resctrl: Add a helper to avoid reaching into the arch code resource list Dave Martin
2024-04-26 15:08   ` [PATCH v2 03/35] x86/resctrl: Move ctrlval string parsing policy away from the arch code Dave Martin
2024-04-26 15:08   ` [PATCH v2 04/35] x86/resctrl: Add helper for setting CPU default properties Dave Martin
2024-04-26 15:08   ` [PATCH v2 05/35] x86/resctrl: Remove rdtgroup from update_cpu_closid_rmid() Dave Martin
2024-04-26 15:08   ` [PATCH v2 06/35] x86/resctrl: Export resctrl fs's init function Dave Martin
2024-05-23  0:48     ` Shaopeng Tan (Fujitsu)
2024-04-26 15:08   ` [PATCH v2 07/35] x86/resctrl: Wrap resctrl_arch_find_domain() around rdt_find_domain() Dave Martin
2024-04-26 15:08   ` [PATCH v2 08/35] x86/resctrl: Move resctrl types to a separate header Dave Martin
2024-04-26 15:08   ` [PATCH v2 09/35] x86/resctrl: Add a resctrl helper to reset all the resources Dave Martin
2024-04-26 15:08   ` [PATCH v2 10/35] x86/resctrl: Move monitor init work to a resctrl init call Dave Martin
2024-04-26 15:08   ` [PATCH v2 11/35] x86/resctrl: Move monitor exit work to a resctrl exit call Dave Martin
2024-04-26 15:08   ` [PATCH v2 12/35] x86/resctrl: Move max_{name,data}_width into resctrl code Dave Martin
2024-04-26 15:08   ` Dave Martin [this message]
2024-04-26 15:08   ` [PATCH v2 14/35] x86/resctrl: Export the is_mbm_*_enabled() helpers to asm/resctrl.h Dave Martin
2024-04-26 15:08   ` [PATCH v2 15/35] x86/resctrl: Add resctrl_arch_is_evt_configurable() to abstract BMEC Dave Martin
2024-04-26 15:08   ` [PATCH v2 16/35] x86/resctrl: Change mon_event_config_{read,write}() to be arch helpers Dave Martin
2024-04-26 15:08   ` [PATCH v2 17/35] x86/resctrl: Move mbm_cfg_mask to struct rdt_resource Dave Martin
2024-06-14 13:57     ` James Morse
2024-04-26 15:08   ` [PATCH v2 18/35] x86/resctrl: Allow resctrl_arch_mon_event_config_write() to return an error Dave Martin
2024-04-26 15:08   ` [PATCH v2 19/35] x86/resctrl: Add resctrl_arch_ prefix to pseudo lock functions Dave Martin
2024-04-26 15:08   ` [PATCH v2 20/35] x86/resctrl: Allow an architecture to disable pseudo lock Dave Martin
2024-04-26 15:08   ` [PATCH v2 21/35] x86/resctrl: Make prefetch_disable_bits belong to the arch code Dave Martin
2024-04-26 15:08   ` [PATCH v2 22/35] x86/resctrl: Make resctrl_arch_pseudo_lock_fn() take a plr Dave Martin
2024-06-14 13:58     ` James Morse
2024-04-26 15:08   ` [PATCH v2 23/35] x86/resctrl: Move thread_throttle_mode_init() to be managed by resctrl Dave Martin
2024-04-26 15:08   ` [PATCH v2 24/35] x86/resctrl: Move get_config_index() to a header Dave Martin
2024-04-26 15:08   ` [PATCH v2 25/35] x86/resctrl: Claim get_domain_from_cpu() for resctrl Dave Martin
2024-04-26 15:08   ` [PATCH v2 26/35] x86/resctrl: Describe resctrl's bitmap size assumptions Dave Martin
2024-04-26 15:08   ` [PATCH v2 27/35] x86/resctrl: Rename resctrl_sched_in() to begin with "resctrl_arch_" Dave Martin
2024-04-26 15:08   ` [PATCH v2 28/35] x86/resctrl: Drop __init/__exit on assorted symbols Dave Martin
2024-04-26 15:08   ` [PATCH v2 29/35] fs/resctrl: Add boiler plate for external resctrl code Dave Martin
2024-06-14 13:59     ` James Morse
2024-04-26 15:08   ` [PATCH v2 30/35] x86/resctrl: Squelch whitespace anomalies in resctrl core code Dave Martin
2024-04-26 15:09   ` [PATCH v2 31/35] x86/resctrl: Prefer alloc(sizeof(*foo)) idiom in rdt_init_fs_context() Dave Martin
2024-04-26 15:09   ` [PATCH v2 32/35] x86/resctrl: Relax some asm #includes Dave Martin
2024-04-26 15:09   ` [PATCH v2 33/35] x86/resctrl: Move the filesystem bits to headers visible to fs/resctrl Dave Martin
2024-04-26 15:09   ` [PATCH v2 34/35] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl Dave Martin
2024-04-26 15:09   ` [PATCH v2 35/35] [SQUASHME] " Dave Martin
2024-04-29 23:34 ` [PATCH v2 00/35] " Peter Newman
2024-04-30 16:29   ` Dave Martin
2024-05-08 15:41 ` Reinette Chatre
2024-05-14 15:17   ` Dave Martin
2024-05-14 15:56     ` Reinette Chatre
2024-05-23 15:01       ` Dave Martin
2024-05-23 15:07         ` David Hildenbrand
2024-05-23 15:18           ` Dave Martin
2024-05-23  0:39 ` Shaopeng Tan (Fujitsu)
2024-06-14 13:59   ` 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=20240426150904.8854-13-Dave.Martin@arm.com \
    --to=dave.martin@arm.com \
    --cc=Babu.Moger@amd.com \
    --cc=amitsinght@marvell.com \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=bobo.shaobowang@huawei.com \
    --cc=bp@alien8.de \
    --cc=carl@os.amperecomputing.com \
    --cc=david@redhat.com \
    --cc=dfustini@baylibre.com \
    --cc=fenghua.yu@intel.com \
    --cc=hpa@zytor.com \
    --cc=james.morse@arm.com \
    --cc=lcherian@marvell.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peternewman@google.com \
    --cc=quic_jiles@quicinc.com \
    --cc=reinette.chatre@intel.com \
    --cc=rex.nie@jaguarmicro.com \
    --cc=scott@os.amperecomputing.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=tan.shaopeng@fujitsu.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=xhao@linux.alibaba.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox