mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Chen Yu <yu.c.chen@intel.com>
To: Reinette Chatre <reinette.chatre@intel.com>,
	Tony Luck <tony.luck@intel.com>
Cc: Ben Horgan <ben.horgan@arm.com>,
	"James Morse" <james.morse@arm.com>,
	Dave Martin <Dave.Martin@arm.com>,
	Babu Moger <babu.moger@amd.com>, Fenghua Yu <fenghuay@nvidia.com>,
	Borislav Petkov <bp@alien8.de>,
	Thomas Gleixner <tglx@linutronix.de>,
	"Dave Hansen" <dave.hansen@linux.intel.com>,
	Peter Newman <peternewman@google.com>,
	chen.yu@linux.dev, x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [RFC PATCH 11/31] x86/resctrl: Rename struct resctrl_membw to struct resctrl_ctrl_scalar
Date: Mon,  3 Aug 2026 00:05:34 +0800	[thread overview]
Message-ID: <be7331429c3a648240ecd0653614f3ab68c0467c.1785680802.git.yu.c.chen@intel.com> (raw)
In-Reply-To: <cover.1785680802.git.yu.c.chen@intel.com>

Rename struct resctrl_membw to struct resctrl_ctrl_scalar to better
reflect its role as the property container for scalar-type controls.
Also rename the union member from 'membw' to 'scalar' for consistency.

This follows the design discussed in the generic schema RFC where
controls are classified by type (scalar vs bitmap) rather than by
the specific resource they manage (memory bandwidth).

Signed-off-by: Chen Yu <yu.c.chen@intel.com>
---
 arch/x86/kernel/cpu/resctrl/core.c | 30 +++++++++++++++---------------
 drivers/resctrl/mpam_resctrl.c     |  6 +++---
 fs/resctrl/ctrlmondata.c           |  6 +++---
 fs/resctrl/monitor.c               |  8 ++++----
 fs/resctrl/rdtgroup.c              | 20 ++++++++++----------
 include/linux/resctrl.h            | 16 ++++++++--------
 6 files changed, 43 insertions(+), 43 deletions(-)

diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
index 1357f3e5ebd3..9566ee43f206 100644
--- a/arch/x86/kernel/cpu/resctrl/core.c
+++ b/arch/x86/kernel/cpu/resctrl/core.c
@@ -204,9 +204,9 @@ static __init bool __get_mem_config_intel(struct rdt_resource *r)
 	hw_ctrl->r_ctrl.name = RESCTRL_CTRL_NAME_DEF;
 	INIT_LIST_HEAD(&hw_ctrl->r_ctrl.domains);
 
-	hw_ctrl->r_ctrl.membw.max_bw = MAX_MBA_BW;
-	hw_ctrl->r_ctrl.membw.min_bw = MAX_MBA_BW - max_delay;
-	hw_ctrl->r_ctrl.membw.bw_gran = MAX_MBA_BW - max_delay;
+	hw_ctrl->r_ctrl.scalar.max_bw = MAX_MBA_BW;
+	hw_ctrl->r_ctrl.scalar.min_bw = MAX_MBA_BW - max_delay;
+	hw_ctrl->r_ctrl.scalar.bw_gran = MAX_MBA_BW - max_delay;
 
 	r->bw_delay_linear = true;
 	if (boot_cpu_has(X86_FEATURE_PER_THREAD_MBA))
@@ -214,10 +214,10 @@ static __init bool __get_mem_config_intel(struct rdt_resource *r)
 	else
 		r->bw_throttle_mode = THREAD_THROTTLE_MAX;
 
-	hw_ctrl->r_ctrl.membw.resolution = 100;
-	hw_ctrl->r_ctrl.membw.tolerance = 5;
-	hw_ctrl->r_ctrl.membw.scale = 1;
-	hw_ctrl->r_ctrl.membw.unit = RESCTRL_CTRL_UNIT_ALL;
+	hw_ctrl->r_ctrl.scalar.resolution = 100;
+	hw_ctrl->r_ctrl.scalar.tolerance = 5;
+	hw_ctrl->r_ctrl.scalar.scale = 1;
+	hw_ctrl->r_ctrl.scalar.unit = RESCTRL_CTRL_UNIT_ALL;
 
 	hw_ctrl->msr_base = MSR_IA32_MBA_THRTL_BASE;
 	hw_ctrl->msr_update = mba_wrmsr_intel;
@@ -246,7 +246,7 @@ static __init bool __rdt_get_mem_config_amd(struct rdt_resource *r)
 	if (!hw_ctrl)
 		return false;
 
-	if (BITS_PER_TYPE(hw_ctrl->r_ctrl.membw.max_bw) <= eax) {
+	if (BITS_PER_TYPE(hw_ctrl->r_ctrl.scalar.max_bw) <= eax) {
 		pr_warn("Unable to support hardware's maximum bandwidth\n");
 		kfree(hw_ctrl);
 		return false;
@@ -257,7 +257,7 @@ static __init bool __rdt_get_mem_config_amd(struct rdt_resource *r)
 	hw_ctrl->r_ctrl.name = RESCTRL_CTRL_NAME_DEF;
 	INIT_LIST_HEAD(&hw_ctrl->r_ctrl.domains);
 
-	hw_ctrl->r_ctrl.membw.max_bw = BIT(eax);
+	hw_ctrl->r_ctrl.scalar.max_bw = BIT(eax);
 
 	/* AMD does not use delay */
 	r->bw_delay_linear = false;
@@ -267,12 +267,12 @@ static __init bool __rdt_get_mem_config_amd(struct rdt_resource *r)
 	 * the allocation like Intel does.
 	 */
 	r->bw_throttle_mode = THREAD_THROTTLE_UNDEFINED;
-	hw_ctrl->r_ctrl.membw.min_bw = 0;
-	hw_ctrl->r_ctrl.membw.bw_gran = 1;
-	hw_ctrl->r_ctrl.membw.resolution = 8;
-	hw_ctrl->r_ctrl.membw.tolerance = 0;
-	hw_ctrl->r_ctrl.membw.scale = 1;
-	hw_ctrl->r_ctrl.membw.unit = RESCTRL_CTRL_UNIT_GBPS;
+	hw_ctrl->r_ctrl.scalar.min_bw = 0;
+	hw_ctrl->r_ctrl.scalar.bw_gran = 1;
+	hw_ctrl->r_ctrl.scalar.resolution = 8;
+	hw_ctrl->r_ctrl.scalar.tolerance = 0;
+	hw_ctrl->r_ctrl.scalar.scale = 1;
+	hw_ctrl->r_ctrl.scalar.unit = RESCTRL_CTRL_UNIT_GBPS;
 
 	if (r->rid == RDT_RESOURCE_MBA) {
 		hw_ctrl->msr_base = MSR_IA32_MBA_BW_BASE;
diff --git a/drivers/resctrl/mpam_resctrl.c b/drivers/resctrl/mpam_resctrl.c
index a9bfab03f0d5..b97c9b80d0ed 100644
--- a/drivers/resctrl/mpam_resctrl.c
+++ b/drivers/resctrl/mpam_resctrl.c
@@ -1043,9 +1043,9 @@ static int mpam_resctrl_control_init(struct mpam_resctrl_res *res)
 
 		r->bw_delay_linear = true;
 		r->bw_throttle_mode = THREAD_THROTTLE_UNDEFINED;
-		mpam_ctrl->r_ctrl.membw.min_bw = get_mba_min(cprops);
-		mpam_ctrl->r_ctrl.membw.max_bw = MAX_MBA_BW;
-		mpam_ctrl->r_ctrl.membw.bw_gran = get_mba_granularity(cprops);
+		mpam_ctrl->r_ctrl.scalar.min_bw = get_mba_min(cprops);
+		mpam_ctrl->r_ctrl.scalar.max_bw = MAX_MBA_BW;
+		mpam_ctrl->r_ctrl.scalar.bw_gran = get_mba_granularity(cprops);
 		list_add(&mpam_ctrl->r_ctrl.entry, &r->controls);
 
 		r->name = "MB";
diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c
index d95ab8ad36e2..fd1a9203d6e5 100644
--- a/fs/resctrl/ctrlmondata.c
+++ b/fs/resctrl/ctrlmondata.c
@@ -86,13 +86,13 @@ static bool bw_validate(char *buf, u32 *data, struct rdt_resource *r,
 		return true;
 	}
 
-	if (bw < ctrl->membw.min_bw || bw > ctrl->membw.max_bw) {
+	if (bw < ctrl->scalar.min_bw || bw > ctrl->scalar.max_bw) {
 		rdt_last_cmd_printf("MB value %u out of range [%d,%d]\n",
-				    bw, ctrl->membw.min_bw, ctrl->membw.max_bw);
+				    bw, ctrl->scalar.min_bw, ctrl->scalar.max_bw);
 		return false;
 	}
 
-	*data = roundup(bw, (unsigned long)ctrl->membw.bw_gran);
+	*data = roundup(bw, (unsigned long)ctrl->scalar.bw_gran);
 	return true;
 }
 
diff --git a/fs/resctrl/monitor.c b/fs/resctrl/monitor.c
index 89baed73bcd6..63d48be41025 100644
--- a/fs/resctrl/monitor.c
+++ b/fs/resctrl/monitor.c
@@ -758,11 +758,11 @@ static void update_mba_bw(struct rdtgroup *rgrp, struct rdt_l3_mon_domain *dom_m
 	 * 40% would go past the limit by multiplying current bandwidth by
 	 * "(30 + 10) / 30".
 	 */
-	if (cur_msr_val > ctrl->membw.min_bw && user_bw < cur_bw) {
-		new_msr_val = cur_msr_val - ctrl->membw.bw_gran;
+	if (cur_msr_val > ctrl->scalar.min_bw && user_bw < cur_bw) {
+		new_msr_val = cur_msr_val - ctrl->scalar.bw_gran;
 	} else if (cur_msr_val < MAX_MBA_BW &&
-		   (user_bw > (cur_bw * (cur_msr_val + ctrl->membw.min_bw) / cur_msr_val))) {
-		new_msr_val = cur_msr_val + ctrl->membw.bw_gran;
+		   (user_bw > (cur_bw * (cur_msr_val + ctrl->scalar.min_bw) / cur_msr_val))) {
+		new_msr_val = cur_msr_val + ctrl->scalar.bw_gran;
 	} else {
 		return;
 	}
diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c
index 5ccd09b16e0f..4392242e63da 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c
@@ -1179,7 +1179,7 @@ static int rdt_min_bw_show(struct kernfs_open_file *of,
 	if (!ctrl || ctrl->type != RESCTRL_CTRL_SCALAR)
 		return 0;
 
-	seq_printf(seq, "%u\n", ctrl->membw.min_bw);
+	seq_printf(seq, "%u\n", ctrl->scalar.min_bw);
 	return 0;
 }
 
@@ -1222,7 +1222,7 @@ static int rdt_bw_gran_show(struct kernfs_open_file *of,
 	if (!ctrl || ctrl->type != RESCTRL_CTRL_SCALAR)
 		return 0;
 
-	seq_printf(seq, "%u\n", ctrl->membw.bw_gran);
+	seq_printf(seq, "%u\n", ctrl->scalar.bw_gran);
 	return 0;
 }
 
@@ -1622,7 +1622,7 @@ bool is_mba_sc(struct rdt_resource *r, struct resctrl_ctrl *ctrl)
 			return false;
 	}
 
-	return ctrl->membw.mba_sc;
+	return ctrl->scalar.mba_sc;
 }
 
 /*
@@ -2256,7 +2256,7 @@ static int resctrl_ctrl_min_show(struct kernfs_open_file *of,
 {
 	struct resctrl_ctrl *ctrl = rdt_kn_parent_priv(of->kn);
 
-	seq_printf(seq, "%u\n", ctrl->membw.min_bw);
+	seq_printf(seq, "%u\n", ctrl->scalar.min_bw);
 
 	return 0;
 }
@@ -2266,7 +2266,7 @@ static int resctrl_ctrl_max_show(struct kernfs_open_file *of,
 {
 	struct resctrl_ctrl *ctrl = rdt_kn_parent_priv(of->kn);
 
-	seq_printf(seq, "%u\n", ctrl->membw.max_bw);
+	seq_printf(seq, "%u\n", ctrl->scalar.max_bw);
 
 	return 0;
 }
@@ -2276,7 +2276,7 @@ static int resctrl_ctrl_resolution_show(struct kernfs_open_file *of,
 {
 	struct resctrl_ctrl *ctrl = rdt_kn_parent_priv(of->kn);
 
-	seq_printf(seq, "%u\n", ctrl->membw.resolution);
+	seq_printf(seq, "%u\n", ctrl->scalar.resolution);
 
 	return 0;
 }
@@ -2286,7 +2286,7 @@ static int resctrl_ctrl_tolerance_show(struct kernfs_open_file *of,
 {
 	struct resctrl_ctrl *ctrl = rdt_kn_parent_priv(of->kn);
 
-	seq_printf(seq, "%d\n", ctrl->membw.tolerance);
+	seq_printf(seq, "%d\n", ctrl->scalar.tolerance);
 
 	return 0;
 }
@@ -2296,7 +2296,7 @@ static int resctrl_ctrl_scale_show(struct kernfs_open_file *of,
 {
 	struct resctrl_ctrl *ctrl = rdt_kn_parent_priv(of->kn);
 
-	seq_printf(seq, "%u\n", ctrl->membw.scale);
+	seq_printf(seq, "%u\n", ctrl->scalar.scale);
 
 	return 0;
 }
@@ -2306,7 +2306,7 @@ static int resctrl_ctrl_unit_show(struct kernfs_open_file *of,
 {
 	struct resctrl_ctrl *ctrl = rdt_kn_parent_priv(of->kn);
 
-	switch (ctrl->membw.unit) {
+	switch (ctrl->scalar.unit) {
 	case RESCTRL_CTRL_UNIT_ALL:
 		seq_puts(seq, "all\n");
 		return 0;
@@ -2901,7 +2901,7 @@ static int set_mba_sc(bool mba_sc)
 	if (!supports_mba_mbps(ctrl) || mba_sc == is_mba_sc(r, ctrl))
 		return -EINVAL;
 
-	ctrl->membw.mba_sc = mba_sc;
+	ctrl->scalar.mba_sc = mba_sc;
 
 	rdtgroup_default.mba_mbps_event = mba_mbps_default_event;
 
diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
index 72fb7256270e..f54a889c6d99 100644
--- a/include/linux/resctrl.h
+++ b/include/linux/resctrl.h
@@ -258,10 +258,10 @@ enum resctrl_ctrl_unit {
 };
 
 /**
- * struct resctrl_membw - Memory bandwidth allocation related data
- * @min_bw:		Minimum memory bandwidth percentage user can request
- * @max_bw:		Maximum memory bandwidth value, used as the reset value
- * @bw_gran:		Granularity at which the memory bandwidth is allocated
+ * struct resctrl_ctrl_scalar - Scalar control type properties
+ * @min_bw:		Minimum scalar control value user can request
+ * @max_bw:		Maximum scalar control value, used as the reset value
+ * @bw_gran:		Granularity at which the scalar control is allocated
  * @resolution:		If the control is proportional (for example, a
  *			percentage) this is the number of divisions that
  *			resource can be divided into. Otherwise, since this
@@ -284,7 +284,7 @@ enum resctrl_ctrl_unit {
  * the amount of resource allocated by this control is:
  * 		C * scale / resolution * unit
  */
-struct resctrl_membw {
+struct resctrl_ctrl_scalar {
 	u32				min_bw;
 	u32				max_bw;
 	u32				bw_gran;
@@ -370,7 +370,7 @@ enum resctrl_ctrl_name {
  *		For example, with resource name "MB" and control name "MAX" the
  *		schema entry will be "MB_MAX".
  * @cache:	Cache allocation control properties.
- * @membw:	Bandwidth control properties.
+ * @scalar:	Scalar control properties.
  */
 struct resctrl_ctrl {
 	struct list_head	entry;
@@ -380,7 +380,7 @@ struct resctrl_ctrl {
 	enum resctrl_ctrl_name	name;
 	union {
 		struct resctrl_cache	cache;
-		struct resctrl_membw	membw;
+		struct resctrl_ctrl_scalar	scalar;
 	};
 };
 
@@ -483,7 +483,7 @@ static inline u32 resctrl_get_default_ctrlval(struct resctrl_ctrl *ctrl)
 	case RESCTRL_CTRL_BITMAP:
 		return BIT_MASK(ctrl->cache.cbm_len) - 1;
 	case RESCTRL_CTRL_SCALAR:
-		return ctrl->membw.max_bw;
+		return ctrl->scalar.max_bw;
 	}
 
 	return WARN_ON_ONCE(1);
-- 
2.43.0


  parent reply	other threads:[~2026-08-02 16:15 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-02 15:57 [RFC PATCH 00/31] Introduce region-aware RDT support Chen Yu
2026-08-02 16:02 ` [RFC PATCH 01/31] x86/topology: Export topo_lookup_cpuid() for resctrl use Chen Yu
2026-08-02 16:02 ` [RFC PATCH 02/31] x86/resctrl: Require 64-bit x86 for resctrl support Chen Yu
2026-08-02 16:02 ` [RFC PATCH 03/31] x86/resctrl: Parse ACPI ERDT table and save CACD cpumask for RMDD domains Chen Yu
2026-08-02 16:03 ` [RFC PATCH 04/31] x86/resctrl: Attach ACPI ERDT information to L3 mon domain on CPU online Chen Yu
2026-08-02 16:03 ` [RFC PATCH 05/31] x86/resctrl: Parse ACPI CMRC table Chen Yu
2026-08-04 17:19   ` Luck, Tony
2026-08-04 18:13     ` Luck, Tony
2026-08-05  4:59       ` Chen, Yu C
2026-08-02 16:03 ` [RFC PATCH 06/31] x86/resctrl: Refactor the monitor read function Chen Yu
2026-08-02 16:04 ` [RFC PATCH 07/31] fs/resctrl: Do not invoke smp_processor_id() in preemptible context Chen Yu
2026-08-02 16:04 ` [RFC PATCH 08/31] x86/resctrl: Introduce erdt_cpu_has() and erdt_support() Chen Yu
2026-08-02 16:05 ` [RFC PATCH 09/31] x86/resctrl: Add MMIO-based LLC occupancy monitoring support Chen Yu
2026-08-02 16:05 ` [RFC PATCH 10/31] Revert "x86/resctrl: NOT_FOR_INCLUSION: Example support for multiple controls" Chen Yu
2026-08-02 16:05 ` Chen Yu [this message]
2026-08-02 16:05 ` [RFC PATCH 12/31] x86/resctrl: Rename struct resctrl_cache to struct resctrl_ctrl_bitmap Chen Yu
2026-08-02 16:05 ` [RFC PATCH 13/31] x86/resctrl: Add per-control and per-resource flags Chen Yu
2026-08-02 16:06 ` [RFC PATCH 14/31] x86/resctrl: Add emulation controller list to resctrl_ctrl Chen Yu
2026-08-02 16:06 ` [RFC PATCH 15/31] x86/resctrl: Parse ACPI MMRC table Chen Yu
2026-08-02 16:06 ` [RFC PATCH 16/31] x86/resctrl: Replace "msr" in monitoring data identifiers Chen Yu
2026-08-02 16:06 ` [RFC PATCH 17/31] x86/resctrl: Introduce region aware MBM event definitions Chen Yu
2026-08-02 16:06 ` [RFC PATCH 18/31] x86/resctrl: Introduce memory region based MBM read callback on MMIO space Chen Yu
2026-08-02 16:06 ` [RFC PATCH 19/31] x86/resctrl: Enable the region based events by adding them into the event Chen Yu
2026-08-02 16:06 ` [RFC PATCH 20/31] x86/resctrl: Rename msr_update to hw_update Chen Yu
2026-08-02 16:07 ` [RFC PATCH 21/31] x86/resctrl: Parse ACPI MARC table Chen Yu
2026-08-02 16:07 ` [RFC PATCH 22/31] fs/resctrl: Add region-based control names and resctrl_ctrl_name_region() Chen Yu
2026-08-02 16:07 ` [RFC PATCH 23/31] x86/resctrl: Add region aware MBA controllers Chen Yu
2026-08-02 16:07 ` [RFC PATCH 24/31] x86/resctrl: Attach ACPI ERDT information to ctrl domain on CPU online Chen Yu
2026-08-02 16:07 ` [RFC PATCH 25/31] x86/resctrl: Introduce region-based MBA write implementation on MMIO space Chen Yu
2026-08-04 21:13   ` Luck, Tony
2026-08-05  6:32     ` Chen, Yu C
2026-08-02 16:07 ` [RFC PATCH 26/31] x86/resctrl: Allow control writes from any CPU for MMIO controllers Chen Yu
2026-08-02 16:07 ` [RFC PATCH 27/31] x86/resctrl: Enable region-aware MBM/MBA via the RDT_CTRL register Chen Yu
2026-08-02 16:08 ` [RFC PATCH 28/31] x86/resctrl: Emulate the legacy MBA controller via the region MAX controls Chen Yu
2026-08-02 16:08 ` [RFC PATCH 29/31] fs/resctrl: Expose emulation controllers in a resource_schemata subdir Chen Yu
2026-08-02 16:08 ` [RFC PATCH 30/31] fs/resctrl: Fix excessive padding in schemata output Chen Yu
2026-08-02 16:08 ` [RFC PATCH 31/31] x86,fs/resctrl: Update Documentation for region aware RDT Chen Yu

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=be7331429c3a648240ecd0653614f3ab68c0467c.1785680802.git.yu.c.chen@intel.com \
    --to=yu.c.chen@intel.com \
    --cc=Dave.Martin@arm.com \
    --cc=babu.moger@amd.com \
    --cc=ben.horgan@arm.com \
    --cc=bp@alien8.de \
    --cc=chen.yu@linux.dev \
    --cc=dave.hansen@linux.intel.com \
    --cc=fenghuay@nvidia.com \
    --cc=james.morse@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peternewman@google.com \
    --cc=reinette.chatre@intel.com \
    --cc=tglx@linutronix.de \
    --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®