The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: James Morse <james.morse@arm.com>
To: x86@kernel.org, linux-kernel@vger.kernel.org
Cc: 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>,
	James Morse <james.morse@arm.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, tan.shaopeng@fujitsu.com,
	baolin.wang@linux.alibaba.com,
	Jamie Iles <quic_jiles@quicinc.com>,
	Xin Hao <xhao@linux.alibaba.com>,
	peternewman@google.com, dfustini@baylibre.com,
	amitsinght@marvell.com, David Hildenbrand <david@redhat.com>,
	Rex Nie <rex.nie@jaguarmicro.com>,
	Dave Martin <dave.martin@arm.com>, Koba Ko <kobak@nvidia.com>,
	Shanker Donthineni <sdonthineni@nvidia.com>,
	fenghuay@nvidia.com, Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>,
	Babu Moger <babu.moger@amd.com>, Tony Luck <tony.luck@intel.com>
Subject: [PATCH v8:for-boris 23/30] x86/resctrl: Add resctrl_arch_ prefix to pseudo lock functions
Date: Tue, 11 Mar 2025 18:37:08 +0000	[thread overview]
Message-ID: <20250311183715.16445-24-james.morse@arm.com> (raw)
In-Reply-To: <20250311183715.16445-1-james.morse@arm.com>

resctrl's pseudo lock has some copy-to-cache and measurement
functions that are micro-architecture specific.

For example, pseudo_lock_fn() is not at all portable.

Label these 'resctrl_arch_' so they stay under /arch/x86.
To expose these functions to the filesystem code they need an entry
in a header file, and can't be marked static.

Signed-off-by: James Morse <james.morse@arm.com>
Tested-by: Carl Worth <carl@os.amperecomputing.com> # arm64
Tested-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>
Tested-by: Peter Newman <peternewman@google.com>
Tested-by: Amit Singh Tomar <amitsinght@marvell.com> # arm64
Tested-by: Shanker Donthineni <sdonthineni@nvidia.com> # arm64
Tested-by: Babu Moger <babu.moger@amd.com>
Reviewed-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>
Reviewed-by: Tony Luck <tony.luck@intel.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Reviewed-by: Fenghua Yu <fenghuay@nvidia.com>
---
Changes since v6:
 * Removed a space.

Changes since v5:
 * Expanded commit message.
---
 arch/x86/include/asm/resctrl.h            |  5 ++++
 arch/x86/kernel/cpu/resctrl/pseudo_lock.c | 36 ++++++++++++-----------
 2 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/arch/x86/include/asm/resctrl.h b/arch/x86/include/asm/resctrl.h
index 6d4c7ea2c9e3..86407dbde583 100644
--- a/arch/x86/include/asm/resctrl.h
+++ b/arch/x86/include/asm/resctrl.h
@@ -203,6 +203,11 @@ static inline void *resctrl_arch_mon_ctx_alloc(struct rdt_resource *r, int evtid
 static inline void resctrl_arch_mon_ctx_free(struct rdt_resource *r, int evtid,
 					     void *ctx) { };
 
+u64 resctrl_arch_get_prefetch_disable_bits(void);
+int resctrl_arch_pseudo_lock_fn(void *_rdtgrp);
+int resctrl_arch_measure_cycles_lat_fn(void *_plr);
+int resctrl_arch_measure_l2_residency(void *_plr);
+int resctrl_arch_measure_l3_residency(void *_plr);
 void resctrl_cpu_detect(struct cpuinfo_x86 *c);
 
 #else
diff --git a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c b/arch/x86/kernel/cpu/resctrl/pseudo_lock.c
index 42cc162f7fc9..1f42c1190d26 100644
--- a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c
+++ b/arch/x86/kernel/cpu/resctrl/pseudo_lock.c
@@ -61,7 +61,8 @@ static const struct class pseudo_lock_class = {
 };
 
 /**
- * get_prefetch_disable_bits - prefetch disable bits of supported platforms
+ * resctrl_arch_get_prefetch_disable_bits - prefetch disable bits of supported
+ *                                          platforms
  * @void: It takes no parameters.
  *
  * Capture the list of platforms that have been validated to support
@@ -75,13 +76,13 @@ static const struct class pseudo_lock_class = {
  * in the SDM.
  *
  * When adding a platform here also add support for its cache events to
- * measure_cycles_perf_fn()
+ * resctrl_arch_measure_l*_residency()
  *
  * Return:
  * If platform is supported, the bits to disable hardware prefetchers, 0
  * if platform is not supported.
  */
-static u64 get_prefetch_disable_bits(void)
+u64 resctrl_arch_get_prefetch_disable_bits(void)
 {
 	if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL ||
 	    boot_cpu_data.x86 != 6)
@@ -408,7 +409,7 @@ static void pseudo_lock_free(struct rdtgroup *rdtgrp)
 }
 
 /**
- * pseudo_lock_fn - Load kernel memory into cache
+ * resctrl_arch_pseudo_lock_fn - Load kernel memory into cache
  * @_rdtgrp: resource group to which pseudo-lock region belongs
  *
  * This is the core pseudo-locking flow.
@@ -426,7 +427,7 @@ static void pseudo_lock_free(struct rdtgroup *rdtgrp)
  *
  * Return: 0. Waiter on waitqueue will be woken on completion.
  */
-static int pseudo_lock_fn(void *_rdtgrp)
+int resctrl_arch_pseudo_lock_fn(void *_rdtgrp)
 {
 	struct rdtgroup *rdtgrp = _rdtgrp;
 	struct pseudo_lock_region *plr = rdtgrp->plr;
@@ -712,7 +713,7 @@ int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp)
 	 * Not knowing the bits to disable prefetching implies that this
 	 * platform does not support Cache Pseudo-Locking.
 	 */
-	prefetch_disable_bits = get_prefetch_disable_bits();
+	prefetch_disable_bits = resctrl_arch_get_prefetch_disable_bits();
 	if (prefetch_disable_bits == 0) {
 		rdt_last_cmd_puts("Pseudo-locking not supported\n");
 		return -EINVAL;
@@ -872,7 +873,8 @@ bool rdtgroup_pseudo_locked_in_hierarchy(struct rdt_ctrl_domain *d)
 }
 
 /**
- * measure_cycles_lat_fn - Measure cycle latency to read pseudo-locked memory
+ * resctrl_arch_measure_cycles_lat_fn - Measure cycle latency to read
+ *                                      pseudo-locked memory
  * @_plr: pseudo-lock region to measure
  *
  * There is no deterministic way to test if a memory region is cached. One
@@ -885,7 +887,7 @@ bool rdtgroup_pseudo_locked_in_hierarchy(struct rdt_ctrl_domain *d)
  *
  * Return: 0. Waiter on waitqueue will be woken on completion.
  */
-static int measure_cycles_lat_fn(void *_plr)
+int resctrl_arch_measure_cycles_lat_fn(void *_plr)
 {
 	struct pseudo_lock_region *plr = _plr;
 	u32 saved_low, saved_high;
@@ -1069,7 +1071,7 @@ static int measure_residency_fn(struct perf_event_attr *miss_attr,
 	return 0;
 }
 
-static int measure_l2_residency(void *_plr)
+int resctrl_arch_measure_l2_residency(void *_plr)
 {
 	struct pseudo_lock_region *plr = _plr;
 	struct residency_counts counts = {0};
@@ -1107,7 +1109,7 @@ static int measure_l2_residency(void *_plr)
 	return 0;
 }
 
-static int measure_l3_residency(void *_plr)
+int resctrl_arch_measure_l3_residency(void *_plr)
 {
 	struct pseudo_lock_region *plr = _plr;
 	struct residency_counts counts = {0};
@@ -1205,14 +1207,14 @@ static int pseudo_lock_measure_cycles(struct rdtgroup *rdtgrp, int sel)
 	plr->cpu = cpu;
 
 	if (sel == 1)
-		thread = kthread_run_on_cpu(measure_cycles_lat_fn, plr,
-					    cpu, "pseudo_lock_measure/%u");
+		thread = kthread_run_on_cpu(resctrl_arch_measure_cycles_lat_fn,
+					    plr, cpu, "pseudo_lock_measure/%u");
 	else if (sel == 2)
-		thread = kthread_run_on_cpu(measure_l2_residency, plr,
-					    cpu, "pseudo_lock_measure/%u");
+		thread = kthread_run_on_cpu(resctrl_arch_measure_l2_residency,
+					    plr, cpu, "pseudo_lock_measure/%u");
 	else if (sel == 3)
-		thread = kthread_run_on_cpu(measure_l3_residency, plr,
-					    cpu, "pseudo_lock_measure/%u");
+		thread = kthread_run_on_cpu(resctrl_arch_measure_l3_residency,
+					    plr, cpu, "pseudo_lock_measure/%u");
 	else
 		goto out;
 
@@ -1307,7 +1309,7 @@ int rdtgroup_pseudo_lock_create(struct rdtgroup *rdtgrp)
 
 	plr->thread_done = 0;
 
-	thread = kthread_run_on_cpu(pseudo_lock_fn, rdtgrp,
+	thread = kthread_run_on_cpu(resctrl_arch_pseudo_lock_fn, rdtgrp,
 				    plr->cpu, "pseudo_lock/%u");
 	if (IS_ERR(thread)) {
 		ret = PTR_ERR(thread);
-- 
2.39.5


  parent reply	other threads:[~2025-03-11 18:41 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-11 18:36 [PATCH v8:for-boris 00/30] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 01/30] x86/resctrl: Fix allocation of cleanest CLOSID on platforms with no monitors James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 02/30] x86/resctrl: Add a helper to avoid reaching into the arch code resource list James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 03/30] x86/resctrl: Remove fflags from struct rdt_resource James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 04/30] x86/resctrl: Use schema type to determine how to parse schema values James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 05/30] x86/resctrl: Use schema type to determine the schema format string James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 06/30] x86/resctrl: Remove data_width and the tabular format James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 07/30] x86/resctrl: Add max_bw to struct resctrl_membw James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 08/30] x86/resctrl: Generate default_ctrl instead of sharing it James Morse
2025-03-12  4:46   ` Reinette Chatre
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 09/30] x86/resctrl: Add helper for setting CPU default properties James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 10/30] x86/resctrl: Remove rdtgroup from update_cpu_closid_rmid() James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 11/30] x86/resctrl: Expose resctrl fs's init function to the rest of the kernel James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 12/30] x86/resctrl: Move rdt_find_domain() to be visible to arch and fs code James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 13/30] x86/resctrl: Move resctrl types to a separate header James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:36 ` [PATCH v8:for-boris 14/30] x86/resctrl: Add an arch helper to reset one resource James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 15/30] x86/resctrl: Move monitor exit work to a resctrl exit call James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 16/30] x86/resctrl: Move monitor init work to a resctrl init call James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 17/30] x86/resctrl: Rewrite and move the for_each_*_rdt_resource() walkers James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 18/30] x86/resctrl: Move the is_mbm_*_enabled() helpers to asm/resctrl.h James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 19/30] x86/resctrl: Add resctrl_arch_is_evt_configurable() to abstract BMEC James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 20/30] x86/resctrl: Change mon_event_config_{read,write}() to be arch helpers James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 21/30] x86/resctrl: Move mba_mbps_default_event init to filesystem code James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 22/30] x86/resctrl: Move mbm_cfg_mask to struct rdt_resource James Morse
2025-03-12  4:47   ` Reinette Chatre
2025-03-12  9:13     ` Borislav Petkov
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` James Morse [this message]
2025-03-12 17:20   ` [tip: x86/cache] x86/resctrl: Add resctrl_arch_ prefix to pseudo lock functions tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 24/30] x86/resctrl: Allow an architecture to disable pseudo lock James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 25/30] x86/resctrl: Make prefetch_disable_bits belong to the arch code James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 26/30] x86/resctrl: Make resctrl_arch_pseudo_lock_fn() take a plr James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 27/30] x86/resctrl: Move RFTYPE flags to be managed by resctrl James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 28/30] x86/resctrl: Handle throttle_mode for SMBA resources James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 29/30] x86/resctrl: Move get_config_index() to a header James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-11 18:37 ` [PATCH v8:for-boris 30/30] x86/resctrl: Move get_{mon,ctrl}_domain_from_cpu() to live with their callers James Morse
2025-03-12 17:20   ` [tip: x86/cache] " tip-bot2 for James Morse
2025-03-12  0:29 ` [PATCH v8:for-boris 00/30] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl Moger, Babu
2025-03-12  1:53 ` Luck, Tony
2025-03-12  5:04 ` Reinette Chatre
2025-03-12 10:55 ` Shaopeng Tan (Fujitsu)

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=20250311183715.16445-24-james.morse@arm.com \
    --to=james.morse@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=dave.martin@arm.com \
    --cc=david@redhat.com \
    --cc=dfustini@baylibre.com \
    --cc=fenghuay@nvidia.com \
    --cc=hpa@zytor.com \
    --cc=kobak@nvidia.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=sdonthineni@nvidia.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=tan.shaopeng@fujitsu.com \
    --cc=tan.shaopeng@jp.fujitsu.com \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --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