[tip: x86/cache] x86,fs/resctrl: Remove unnecessary non-linear MBA configuration check
From: tip-bot2 for Reinette Chatre
Date: Mon Nov 09 2026 - 16:28:39 EST
The following commit has been merged into the x86/cache branch of tip:
Commit-ID: 28739daee35258b3c7eac08fdafc872e48453333
Gitweb: https://git.kernel.org/tip/28739daee35258b3c7eac08fdafc872e48453333
Author: Reinette Chatre <reinette.chatre@xxxxxxxxx>
AuthorDate: Wed, 04 Nov 2026 16:13:30 -08:00
Committer: Borislav Petkov (AMD) <bp@xxxxxxxxx>
CommitterDate: Sun, 08 Nov 2026 17:52:59 -08:00
x86,fs/resctrl: Remove unnecessary non-linear MBA configuration check
Writing a bandwidth value from user space is rejected if the MBA resource
has non-linear delay values while the architecture indicates (via
resctrl_membw::arch_needs_linear) it can only configure resources with
linear delay values. Intel indicates this for MBA while AMD and MPAM do not.
This check can never fail. No Intel SKU supports non-linear delay values, and
the placeholder for such support, rdt_get_mb_table(), is only called during
enumeration and always fails.
A non-linear Intel MBA resource is thus never marked as capable of allocation,
and resctrl never exposes it to user space or attempts to configure it. Every
Intel MBA resource capable of allocation has linear delay values, and AMD and
MPAM never indicate a need for them.
Fail enumeration of a non-linear Intel MBA resource directly to make clear
that it is not supported, and remove the check together with the
resctrl_membw::arch_needs_linear property it relies on.
[ bp: Massage commit message. ]
Signed-off-by: Reinette Chatre <reinette.chatre@xxxxxxxxx>
Signed-off-by: Borislav Petkov (AMD) <bp@xxxxxxxxx>
Reviewed-by: Chen Yu <yu.c.chen@xxxxxxxxx>
Reviewed-by: Tony Luck <tony.luck@xxxxxxxxx>
Acked-by: Jinjie Ruan <ruanjinjie@xxxxxxxxxx>
Link: https://patch.msgid.link/7e1aeee81a38a33ca889db68e4c645f935e4e6cd.1793834224.git.reinette.chatre@xxxxxxxxx
---
arch/x86/kernel/cpu/resctrl/core.c | 42 ++++++-----------------------
fs/resctrl/ctrlmondata.c | 8 +------
include/linux/resctrl.h | 2 +-
3 files changed, 10 insertions(+), 42 deletions(-)
diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
index f9677e5..f96f7cf 100644
--- a/arch/x86/kernel/cpu/resctrl/core.c
+++ b/arch/x86/kernel/cpu/resctrl/core.c
@@ -181,27 +181,6 @@ static inline void cache_alloc_hsw_probe(void)
rdt_alloc_capable = true;
}
-/*
- * rdt_get_mb_table() - get a mapping of bandwidth(b/w) percentage values
- * exposed to user interface and the h/w understandable delay values.
- *
- * The non-linear delay values have the granularity of power of two
- * and also the h/w does not guarantee a curve for configured delay
- * values vs. actual b/w enforced.
- * Hence we need a mapping that is pre calibrated so the user can
- * express the memory b/w as a percentage value.
- */
-static inline bool rdt_get_mb_table(struct rdt_resource *r)
-{
- /*
- * There are no Intel SKUs as of now to support non-linear delay.
- */
- pr_info("MBA b/w map not implemented for cpu:%d, model:%d",
- boot_cpu_data.x86, boot_cpu_data.x86_model);
-
- return false;
-}
-
static __init bool __get_mem_config_intel(struct rdt_resource *r)
{
struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
@@ -212,18 +191,18 @@ 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->membw.max_bw = MAX_MBA_BW;
- r->membw.arch_needs_linear = true;
- if (ecx & MBA_IS_LINEAR) {
- r->membw.delay_linear = true;
- r->membw.min_bw = MAX_MBA_BW - max_delay;
- r->membw.bw_gran = MAX_MBA_BW - max_delay;
- } else {
- if (!rdt_get_mb_table(r))
- return false;
- r->membw.arch_needs_linear = false;
+
+ if (!(ecx & MBA_IS_LINEAR)) {
+ pr_info("Non-linear MBA delay values not supported for family:%d, model:%d\n",
+ boot_cpu_data.x86, boot_cpu_data.x86_model);
+ return false;
}
+ r->membw.delay_linear = true;
+ r->membw.max_bw = MAX_MBA_BW;
+ r->membw.min_bw = MAX_MBA_BW - max_delay;
+ r->membw.bw_gran = MAX_MBA_BW - max_delay;
+
if (boot_cpu_has(X86_FEATURE_PER_THREAD_MBA))
r->membw.throttle_mode = THREAD_THROTTLE_PER_THREAD;
else
@@ -255,7 +234,6 @@ static __init bool __rdt_get_mem_config_amd(struct rdt_resource *r)
/* AMD does not use delay */
r->membw.delay_linear = false;
- r->membw.arch_needs_linear = false;
/*
* AMD does not use memory delay throttle model to control
diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c
index cafebdf..4562072 100644
--- a/fs/resctrl/ctrlmondata.c
+++ b/fs/resctrl/ctrlmondata.c
@@ -45,14 +45,6 @@ static bool bw_validate(char *buf, u32 *data, struct rdt_resource *r)
int ret;
u32 bw;
- /*
- * Only linear delay values is supported for current Intel SKUs.
- */
- if (!r->membw.delay_linear && r->membw.arch_needs_linear) {
- rdt_last_cmd_puts("No support for non-linear MB domains\n");
- return false;
- }
-
ret = kstrtou32(buf, 10, &bw);
if (ret) {
rdt_last_cmd_printf("Invalid MB value %s\n", buf);
diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
index b63dc62..66dc981 100644
--- a/include/linux/resctrl.h
+++ b/include/linux/resctrl.h
@@ -249,7 +249,6 @@ enum membw_throttle_mode {
* @max_bw: Maximum memory bandwidth value, used as the reset value
* @bw_gran: Granularity at which the memory bandwidth is allocated
* @delay_linear: True if memory B/W delay is in linear scale
- * @arch_needs_linear: True if we can't configure non-linear resources
* @throttle_mode: Bandwidth throttling mode when threads request
* different memory bandwidths
* @mba_sc: True if MBA software controller(mba_sc) is enabled
@@ -259,7 +258,6 @@ struct resctrl_membw {
u32 max_bw;
u32 bw_gran;
u32 delay_linear;
- bool arch_needs_linear;
enum membw_throttle_mode throttle_mode;
bool mba_sc;
};