mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: James Morse <james.morse@arm.com>
To: x86@kernel.org, linux-kernel@vger.kernel.org
Cc: 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>,
	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>
Subject: [PATCH v4 23/39] x86/resctrl: Allow an architecture to disable pseudo lock
Date: Fri,  2 Aug 2024 17:28:37 +0000	[thread overview]
Message-ID: <20240802172853.22529-24-james.morse@arm.com> (raw)
In-Reply-To: <20240802172853.22529-1-james.morse@arm.com>

Pseudo-lock relies on knowledge of the micro-architecture to disable
prefetchers etc.

On arm64 these controls are typically secure only, meaning linux can't
access them. Arm's cache-lockdown feature works in a very different
way. Resctrl's pseudo-lock isn't going to be used on arm64 platforms.

Add a Kconfig symbol that can be selected by the architecture. This
enables or disables building of the pseudo_lock.c file, and replaces
the functions with stubs. An additional IS_ENABLED() check is needed
in rdtgroup_mode_write() so that attempting to enable pseudo-lock
reports an "Unknown or unsupported mode" to user-space via the
last_cmd file.

Signed-off-by: James Morse <james.morse@arm.com>
Tested-by: Carl Worth <carl@os.amperecomputing.com> # arm64
---
Changes since v2:
 * Clarified the commit message as to where the error string is printed.

Changes since v1:
 * [Commit message only] Typo fix:
   s/psuedo/pseudo/g
---
 arch/x86/Kconfig                       |  7 ++++
 arch/x86/kernel/cpu/resctrl/Makefile   |  5 +--
 arch/x86/kernel/cpu/resctrl/internal.h | 48 +++++++++++++++++++++-----
 arch/x86/kernel/cpu/resctrl/rdtgroup.c |  3 +-
 4 files changed, 52 insertions(+), 11 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 007bab9f2a0e..7e908186dc32 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -493,6 +493,7 @@ config X86_CPU_RESCTRL
 	depends on X86 && (CPU_SUP_INTEL || CPU_SUP_AMD)
 	select KERNFS
 	select PROC_CPU_RESCTRL		if PROC_FS
+	select RESCTRL_FS_PSEUDO_LOCK
 	help
 	  Enable x86 CPU resource control support.
 
@@ -509,6 +510,12 @@ config X86_CPU_RESCTRL
 
 	  Say N if unsure.
 
+config RESCTRL_FS_PSEUDO_LOCK
+	bool
+	help
+	  Software mechanism to pin data in a cache portion using
+	  micro-architecture specific knowledge.
+
 config X86_FRED
 	bool "Flexible Return and Event Delivery"
 	depends on X86_64
diff --git a/arch/x86/kernel/cpu/resctrl/Makefile b/arch/x86/kernel/cpu/resctrl/Makefile
index 4a06c37b9cf1..0c13b0befd8a 100644
--- a/arch/x86/kernel/cpu/resctrl/Makefile
+++ b/arch/x86/kernel/cpu/resctrl/Makefile
@@ -1,4 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0
-obj-$(CONFIG_X86_CPU_RESCTRL)	+= core.o rdtgroup.o monitor.o
-obj-$(CONFIG_X86_CPU_RESCTRL)	+= ctrlmondata.o pseudo_lock.o
+obj-$(CONFIG_X86_CPU_RESCTRL)		+= core.o rdtgroup.o monitor.o
+obj-$(CONFIG_X86_CPU_RESCTRL)		+= ctrlmondata.o
+obj-$(CONFIG_RESCTRL_FS_PSEUDO_LOCK)	+= pseudo_lock.o
 CFLAGS_pseudo_lock.o = -I$(src)
diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
index 87cf2d854205..9e5b174bb5ba 100644
--- a/arch/x86/kernel/cpu/resctrl/internal.h
+++ b/arch/x86/kernel/cpu/resctrl/internal.h
@@ -505,14 +505,6 @@ unsigned int rdtgroup_cbm_to_size(struct rdt_resource *r, struct rdt_ctrl_domain
 				  unsigned long cbm);
 enum rdtgrp_mode rdtgroup_mode_by_closid(int closid);
 int rdtgroup_tasks_assigned(struct rdtgroup *r);
-int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp);
-int rdtgroup_locksetup_exit(struct rdtgroup *rdtgrp);
-bool rdtgroup_cbm_overlaps_pseudo_locked(struct rdt_ctrl_domain *d, unsigned long cbm);
-bool rdtgroup_pseudo_locked_in_hierarchy(struct rdt_ctrl_domain *d);
-int rdt_pseudo_lock_init(void);
-void rdt_pseudo_lock_release(void);
-int rdtgroup_pseudo_lock_create(struct rdtgroup *rdtgrp);
-void rdtgroup_pseudo_lock_remove(struct rdtgroup *rdtgrp);
 struct rdt_ctrl_domain *get_ctrl_domain_from_cpu(int cpu, struct rdt_resource *r);
 struct rdt_mon_domain *get_mon_domain_from_cpu(int cpu, struct rdt_resource *r);
 int closids_supported(void);
@@ -546,4 +538,44 @@ void rdt_staged_configs_clear(void);
 bool closid_allocated(unsigned int closid);
 int resctrl_find_cleanest_closid(void);
 
+#ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK
+int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp);
+int rdtgroup_locksetup_exit(struct rdtgroup *rdtgrp);
+bool rdtgroup_cbm_overlaps_pseudo_locked(struct rdt_ctrl_domain *d, unsigned long cbm);
+bool rdtgroup_pseudo_locked_in_hierarchy(struct rdt_ctrl_domain *d);
+int rdt_pseudo_lock_init(void);
+void rdt_pseudo_lock_release(void);
+int rdtgroup_pseudo_lock_create(struct rdtgroup *rdtgrp);
+void rdtgroup_pseudo_lock_remove(struct rdtgroup *rdtgrp);
+#else
+static inline int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline int rdtgroup_locksetup_exit(struct rdtgroup *rdtgrp)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline bool rdtgroup_cbm_overlaps_pseudo_locked(struct rdt_ctrl_domain *d, unsigned long cbm)
+{
+	return false;
+}
+
+static inline bool rdtgroup_pseudo_locked_in_hierarchy(struct rdt_ctrl_domain *d)
+{
+	return false;
+}
+
+static inline int rdt_pseudo_lock_init(void) { return 0; }
+static inline void rdt_pseudo_lock_release(void) { }
+static inline int rdtgroup_pseudo_lock_create(struct rdtgroup *rdtgrp)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline void rdtgroup_pseudo_lock_remove(struct rdtgroup *rdtgrp) { }
+#endif /* CONFIG_RESCTRL_FS_PSEUDO_LOCK */
+
 #endif /* _ASM_X86_RESCTRL_INTERNAL_H */
diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
index 714cc54006e6..68947e0f69d9 100644
--- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
@@ -1444,7 +1444,8 @@ static ssize_t rdtgroup_mode_write(struct kernfs_open_file *of,
 				goto out;
 		}
 		rdtgrp->mode = RDT_MODE_EXCLUSIVE;
-	} else if (!strcmp(buf, "pseudo-locksetup")) {
+	} else if (IS_ENABLED(CONFIG_RESCTRL_FS_PSEUDO_LOCK) &&
+		   !strcmp(buf, "pseudo-locksetup")) {
 		ret = rdtgroup_locksetup_enter(rdtgrp);
 		if (ret)
 			goto out;
-- 
2.39.2


  parent reply	other threads:[~2024-08-02 17:31 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-02 17:28 [PATCH v4 00/39] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl James Morse
2024-08-02 17:28 ` [PATCH v4 01/39] x86/resctrl: Fix allocation of cleanest CLOSID on platforms with no monitors James Morse
2024-08-02 17:28 ` [PATCH v4 02/39] x86/resctrl: Add a helper to avoid reaching into the arch code resource list James Morse
2024-08-02 17:28 ` [PATCH v4 03/39] x86/resctrl: Remove fflags from struct rdt_resource James Morse
2024-08-14  3:53   ` Reinette Chatre
2024-08-02 17:28 ` [PATCH v4 04/39] x86/resctrl: Use schema type to determine how to parse schema values James Morse
2024-08-14  3:56   ` Reinette Chatre
2024-09-06 18:06     ` James Morse
2024-09-16 22:33       ` Reinette Chatre
2024-09-30 16:42         ` James Morse
2024-08-02 17:28 ` [PATCH v4 05/39] x86/resctrl: Use schema type to determine the schema format string James Morse
2024-08-14  3:57   ` Reinette Chatre
2024-08-02 17:28 ` [PATCH v4 06/39] x86/resctrl: Move data_width to be a schema property James Morse
2024-08-14  3:59   ` Reinette Chatre
2024-09-13 18:07     ` James Morse
2024-08-02 17:28 ` [PATCH v4 07/39] x86/resctrl: Add max_bw to struct resctrl_membw James Morse
2024-08-14  4:00   ` Reinette Chatre
2024-08-02 17:28 ` [PATCH v4 08/39] x86/resctrl: Generate default_ctrl instead of sharing it James Morse
2024-08-14  4:00   ` Reinette Chatre
2024-09-13 18:07     ` James Morse
2024-09-16 22:34       ` Reinette Chatre
2024-08-02 17:28 ` [PATCH v4 09/39] x86/resctrl: Add helper for setting CPU default properties James Morse
2024-08-02 17:28 ` [PATCH v4 10/39] x86/resctrl: Remove rdtgroup from update_cpu_closid_rmid() James Morse
2024-08-02 17:28 ` [PATCH v4 11/39] x86/resctrl: Export resctrl fs's init function James Morse
2024-08-14  4:01   ` Reinette Chatre
2024-08-02 17:28 ` [PATCH v4 12/39] x86/resctrl: Wrap resctrl_arch_find_domain() around rdt_find_domain() James Morse
2024-08-02 17:28 ` [PATCH v4 13/39] x86/resctrl: Move resctrl types to a separate header James Morse
2024-08-02 17:28 ` [PATCH v4 14/39] x86/resctrl: Add a resctrl helper to reset all the resources James Morse
2024-08-02 17:28 ` [PATCH v4 15/39] x86/resctrl: Move monitor exit work to a resctrl exit call James Morse
2024-08-14  4:01   ` Reinette Chatre
2024-09-30 16:42     ` James Morse
2024-08-02 17:28 ` [PATCH v4 16/39] x86/resctrl: Move monitor init work to a resctrl init call James Morse
2024-08-02 17:28 ` [PATCH v4 17/39] x86/resctrl: Rewrite and move the for_each_*_rdt_resource() walkers James Morse
2024-08-15  6:43   ` Shaopeng Tan (Fujitsu)
2024-09-30 16:42     ` James Morse
2024-08-02 17:28 ` [PATCH v4 18/39] x86/resctrl: Export the is_mbm_*_enabled() helpers to asm/resctrl.h James Morse
2024-08-02 17:28 ` [PATCH v4 19/39] x86/resctrl: Add resctrl_arch_is_evt_configurable() to abstract BMEC James Morse
2024-08-14  4:01   ` Reinette Chatre
2024-08-02 17:28 ` [PATCH v4 20/39] x86/resctrl: Change mon_event_config_{read,write}() to be arch helpers James Morse
2024-08-14  4:02   ` Reinette Chatre
2024-10-02 16:58     ` James Morse
2024-08-02 17:28 ` [PATCH v4 21/39] x86/resctrl: Move mbm_cfg_mask to struct rdt_resource James Morse
2024-08-02 17:28 ` [PATCH v4 22/39] x86/resctrl: Add resctrl_arch_ prefix to pseudo lock functions James Morse
2024-08-02 17:28 ` James Morse [this message]
2024-08-14  4:02   ` [PATCH v4 23/39] x86/resctrl: Allow an architecture to disable pseudo lock Reinette Chatre
2024-08-02 17:28 ` [PATCH v4 24/39] x86/resctrl: Make prefetch_disable_bits belong to the arch code James Morse
2024-08-02 17:28 ` [PATCH v4 25/39] x86/resctrl: Make resctrl_arch_pseudo_lock_fn() take a plr James Morse
2024-08-02 17:28 ` [PATCH v4 26/39] x86/resctrl: Move thread_throttle_mode_init() to be managed by resctrl James Morse
2024-08-02 17:28 ` [PATCH v4 27/39] x86/resctrl: Move get_config_index() to a header James Morse
2024-08-02 17:28 ` [PATCH v4 28/39] x86/resctrl: Claim get_{mon,ctrl}_domain_from_cpu() helpers for resctrl James Morse
2024-08-02 17:28 ` [PATCH v4 29/39] x86/resctrl: Describe resctrl's bitmap size assumptions James Morse
2024-08-02 17:28 ` [PATCH v4 30/39] x86/resctrl: Rename resctrl_sched_in() to begin with "resctrl_arch_" James Morse
2024-08-02 17:28 ` [PATCH v4 31/39] x86/resctrl: resctrl_exit() teardown resctrl but leave the mount point James Morse
2024-08-02 17:28 ` [PATCH v4 32/39] x86/resctrl: Drop __init/__exit on assorted symbols James Morse
2024-08-02 17:28 ` [PATCH v4 33/39] x86/resctrl: Move is_mba_sc() out of core.c James Morse
2024-08-02 17:28 ` [PATCH v4 34/39] x86/resctrl: Add end-marker to the resctrl_event_id enum James Morse
2024-08-02 17:28 ` [PATCH v4 35/39] x86/resctrl: Remove a newline to avoid confusing the code move script James Morse
2024-08-02 17:28 ` [PATCH v4 36/39] x86/resctrl: Split trace.h James Morse
2024-08-02 17:28 ` [PATCH v4 37/39] fs/resctrl: Add boiler plate for external resctrl code James Morse
2024-08-14  4:04   ` Reinette Chatre
2024-08-02 17:28 ` [PATCH v4 38/39] x86/resctrl: Move the filesystem bits to headers visible to fs/resctrl James Morse
2024-08-02 17:28 ` [PATCH v4 39/39] x86/resctrl: Add python script to move resctrl code to /fs/resctrl James Morse
2024-08-06  7:13 ` [PATCH v4 00/39] x86/resctrl: Move the resctrl filesystem " Shaopeng Tan (Fujitsu)
2024-08-15  7:04   ` Shaopeng Tan (Fujitsu)
2024-10-02 16:58     ` 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=20240802172853.22529-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=fenghua.yu@intel.com \
    --cc=hpa@zytor.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

all inboxes | Powered by JetHome®