mirror of https://lore.kernel.org/lkml/
 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 (AMD)" <bp@alien8.de>,
	Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>,
	Tony Luck <tony.luck@intel.com>, Fenghua Yu <fenghuay@nvidia.com>,
	Reinette Chatre <reinette.chatre@intel.com>,
	Babu Moger <babu.moger@amd.com>,
	Carl Worth <carl@os.amperecomputing.com>,
	Peter Newman <peternewman@google.com>,
	Amit Singh Tomar <amitsinght@marvell.com>,
	Shanker Donthineni <sdonthineni@nvidia.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: x86/cache] x86/resctrl: Generate default_ctrl instead of sharing it
Date: Wed, 12 Mar 2025 17:20:34 -0000	[thread overview]
Message-ID: <174180003460.14745.17632410573418397127.tip-bot2@tip-bot2> (raw)
In-Reply-To: <20250311183715.16445-9-james.morse@arm.com>

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

Commit-ID:     dbc58f7eec4039ee8f3ec27b2b41d89500debfac
Gitweb:        https://git.kernel.org/tip/dbc58f7eec4039ee8f3ec27b2b41d89500debfac
Author:        James Morse <james.morse@arm.com>
AuthorDate:    Tue, 11 Mar 2025 18:36:53 
Committer:     Borislav Petkov (AMD) <bp@alien8.de>
CommitterDate: Wed, 12 Mar 2025 12:22:44 +01:00

x86/resctrl: Generate default_ctrl instead of sharing it

The struct rdt_resource default_ctrl is used by both the architecture code for
resetting the hardware controls, and sometimes by the filesystem code as the
default value for the schema, unless the bandwidth software controller is in
use.

Having the default exposed by the architecture code causes unnecessary
duplication for each architecture as the default value must be specified, but
can be derived from other schema properties. Now that the maximum bandwidth is
explicitly described, resctrl can derive the default value from the schema
format and the other resource properties.

Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>
Reviewed-by: Tony Luck <tony.luck@intel.com>
Reviewed-by: Fenghua Yu <fenghuay@nvidia.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Reviewed-by: Babu Moger <babu.moger@amd.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>
Link: https://lore.kernel.org/r/20250311183715.16445-9-james.morse@arm.com
---
 arch/x86/kernel/cpu/resctrl/core.c        | 13 +++++--------
 arch/x86/kernel/cpu/resctrl/ctrlmondata.c |  5 +++--
 arch/x86/kernel/cpu/resctrl/rdtgroup.c    |  6 +++---
 include/linux/resctrl.h                   | 19 +++++++++++++++++--
 4 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
index 4504a12..d001ca4 100644
--- a/arch/x86/kernel/cpu/resctrl/core.c
+++ b/arch/x86/kernel/cpu/resctrl/core.c
@@ -155,7 +155,6 @@ static inline void cache_alloc_hsw_probe(void)
 		return;
 
 	hw_res->num_closid = 4;
-	r->default_ctrl = max_cbm;
 	r->cache.cbm_len = 20;
 	r->cache.shareable_bits = 0xc0000;
 	r->cache.min_cbm_bits = 2;
@@ -211,7 +210,6 @@ static __init bool __get_mem_config_intel(struct rdt_resource *r)
 	cpuid_count(0x00000010, 3, &eax.full, &ebx, &ecx, &edx.full);
 	hw_res->num_closid = edx.split.cos_max + 1;
 	max_delay = eax.split.max_delay + 1;
-	r->default_ctrl = MAX_MBA_BW;
 	r->membw.max_bw = MAX_MBA_BW;
 	r->membw.arch_needs_linear = true;
 	if (ecx & MBA_IS_LINEAR) {
@@ -250,7 +248,6 @@ static __init bool __rdt_get_mem_config_amd(struct rdt_resource *r)
 
 	cpuid_count(0x80000020, subleaf, &eax, &ebx, &ecx, &edx);
 	hw_res->num_closid = edx + 1;
-	r->default_ctrl = 1 << eax;
 	r->membw.max_bw = 1 << eax;
 
 	/* AMD does not use delay */
@@ -276,13 +273,13 @@ static void rdt_get_cache_alloc_cfg(int idx, struct rdt_resource *r)
 	union cpuid_0x10_1_eax eax;
 	union cpuid_0x10_x_ecx ecx;
 	union cpuid_0x10_x_edx edx;
-	u32 ebx;
+	u32 ebx, default_ctrl;
 
 	cpuid_count(0x00000010, idx, &eax.full, &ebx, &ecx.full, &edx.full);
 	hw_res->num_closid = edx.split.cos_max + 1;
 	r->cache.cbm_len = eax.split.cbm_len + 1;
-	r->default_ctrl = BIT_MASK(eax.split.cbm_len + 1) - 1;
-	r->cache.shareable_bits = ebx & r->default_ctrl;
+	default_ctrl = BIT_MASK(eax.split.cbm_len + 1) - 1;
+	r->cache.shareable_bits = ebx & default_ctrl;
 	if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)
 		r->cache.arch_has_sparse_bitmasks = ecx.split.noncont;
 	r->alloc_capable = true;
@@ -329,7 +326,7 @@ static u32 delay_bw_map(unsigned long bw, struct rdt_resource *r)
 		return MAX_MBA_BW - bw;
 
 	pr_warn_once("Non Linear delay-bw map not supported but queried\n");
-	return r->default_ctrl;
+	return MAX_MBA_BW;
 }
 
 static void mba_wrmsr_intel(struct msr_param *m)
@@ -438,7 +435,7 @@ static void setup_default_ctrlval(struct rdt_resource *r, u32 *dc)
 	 * For Memory Allocation: Set b/w requested to 100%
 	 */
 	for (i = 0; i < hw_res->num_closid; i++, dc++)
-		*dc = r->default_ctrl;
+		*dc = resctrl_get_default_ctrl(r);
 }
 
 static void ctrl_domain_free(struct rdt_hw_ctrl_domain *hw_dom)
diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
index 23a01ea..5d87f27 100644
--- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
+++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
@@ -113,8 +113,9 @@ static int parse_bw(struct rdt_parse_data *data, struct resctrl_schema *s,
  */
 static bool cbm_validate(char *buf, u32 *data, struct rdt_resource *r)
 {
-	unsigned long first_bit, zero_bit, val;
+	u32 supported_bits = BIT_MASK(r->cache.cbm_len) - 1;
 	unsigned int cbm_len = r->cache.cbm_len;
+	unsigned long first_bit, zero_bit, val;
 	int ret;
 
 	ret = kstrtoul(buf, 16, &val);
@@ -123,7 +124,7 @@ static bool cbm_validate(char *buf, u32 *data, struct rdt_resource *r)
 		return false;
 	}
 
-	if ((r->cache.min_cbm_bits > 0 && val == 0) || val > r->default_ctrl) {
+	if ((r->cache.min_cbm_bits > 0 && val == 0) || val > supported_bits) {
 		rdt_last_cmd_puts("Mask out of range\n");
 		return false;
 	}
diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
index 1e0bae1..cd8f65c 100644
--- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
@@ -978,7 +978,7 @@ static int rdt_default_ctrl_show(struct kernfs_open_file *of,
 	struct resctrl_schema *s = of->kn->parent->priv;
 	struct rdt_resource *r = s->res;
 
-	seq_printf(seq, "%x\n", r->default_ctrl);
+	seq_printf(seq, "%x\n", resctrl_get_default_ctrl(r));
 	return 0;
 }
 
@@ -2882,7 +2882,7 @@ static int reset_all_ctrls(struct rdt_resource *r)
 		hw_dom = resctrl_to_arch_ctrl_dom(d);
 
 		for (i = 0; i < hw_res->num_closid; i++)
-			hw_dom->ctrl_val[i] = r->default_ctrl;
+			hw_dom->ctrl_val[i] = resctrl_get_default_ctrl(r);
 		msr_param.dom = d;
 		smp_call_function_any(&d->hdr.cpu_mask, rdt_ctrl_update, &msr_param, 1);
 	}
@@ -3417,7 +3417,7 @@ static void rdtgroup_init_mba(struct rdt_resource *r, u32 closid)
 		}
 
 		cfg = &d->staged_config[CDP_NONE];
-		cfg->new_ctrl = r->default_ctrl;
+		cfg->new_ctrl = resctrl_get_default_ctrl(r);
 		cfg->have_new_ctrl = true;
 	}
 }
diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
index 465f3cf..d16dc96 100644
--- a/include/linux/resctrl.h
+++ b/include/linux/resctrl.h
@@ -216,7 +216,6 @@ enum resctrl_schema_fmt {
  * @ctrl_domains:	RCU list of all control domains for this resource
  * @mon_domains:	RCU list of all monitor domains for this resource
  * @name:		Name to use in "schemata" file.
- * @default_ctrl:	Specifies default cache cbm or memory B/W percent.
  * @schema_fmt:		Which format string and parser is used for this schema.
  * @evt_list:		List of monitoring events
  * @cdp_capable:	Is the CDP feature available on this resource
@@ -233,7 +232,6 @@ struct rdt_resource {
 	struct list_head	ctrl_domains;
 	struct list_head	mon_domains;
 	char			*name;
-	u32			default_ctrl;
 	enum resctrl_schema_fmt	schema_fmt;
 	struct list_head	evt_list;
 	bool			cdp_capable;
@@ -268,6 +266,23 @@ struct resctrl_schema {
 	u32				num_closid;
 };
 
+/**
+ * resctrl_get_default_ctrl() - Return the default control value for this
+ *                              resource.
+ * @r:		The resource whose default control type is queried.
+ */
+static inline u32 resctrl_get_default_ctrl(struct rdt_resource *r)
+{
+	switch (r->schema_fmt) {
+	case RESCTRL_SCHEMA_BITMAP:
+		return BIT_MASK(r->cache.cbm_len) - 1;
+	case RESCTRL_SCHEMA_RANGE:
+		return r->membw.max_bw;
+	}
+
+	return WARN_ON_ONCE(1);
+}
+
 /* The number of closid supported by this resource regardless of CDP */
 u32 resctrl_arch_get_num_closid(struct rdt_resource *r);
 u32 resctrl_arch_system_num_rmid_idx(void);

  parent reply	other threads:[~2025-03-12 17:20 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-bot2 for James Morse [this message]
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 ` [PATCH v8:for-boris 23/30] x86/resctrl: Add resctrl_arch_ prefix to pseudo lock functions James Morse
2025-03-12 17:20   ` [tip: x86/cache] " 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=174180003460.14745.17632410573418397127.tip-bot2@tip-bot2 \
    --to=tip-bot2@linutronix.de \
    --cc=amitsinght@marvell.com \
    --cc=babu.moger@amd.com \
    --cc=bp@alien8.de \
    --cc=carl@os.amperecomputing.com \
    --cc=fenghuay@nvidia.com \
    --cc=james.morse@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=peternewman@google.com \
    --cc=reinette.chatre@intel.com \
    --cc=sdonthineni@nvidia.com \
    --cc=tan.shaopeng@jp.fujitsu.com \
    --cc=tony.luck@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 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®