From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Gregory Price <gourry@gourry.net>,
Dave Jiang <dave.jiang@intel.com>,
Li Zhijian <lizhijian@fujitsu.com>,
Davidlohr Bueso <dave@stgolabs.net>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Dan Williams <dan.j.williams@intel.com>,
Sasha Levin <sashal@kernel.org>,
alison.schofield@intel.com, ira.weiny@intel.com,
rrichter@amd.com, ming.li@zohomail.com, yaoxt.fnst@fujitsu.com
Subject: [PATCH AUTOSEL 6.15 19/21] cxl: core/region - ignore interleave granularity when ways=1
Date: Fri, 6 Jun 2025 11:41:44 -0400 [thread overview]
Message-ID: <20250606154147.546388-19-sashal@kernel.org> (raw)
In-Reply-To: <20250606154147.546388-1-sashal@kernel.org>
From: Gregory Price <gourry@gourry.net>
[ Upstream commit ce32b0c9c522e5a69ef9c62a56d6ca08fb036d67 ]
When validating decoder IW/IG when setting up regions, the granularity
is irrelevant when iw=1 - all accesses will always route to the only
target anyway - so all ig values are "correct". Loosen the requirement
that `ig = (parent_iw * parent_ig)` when iw=1.
On some Zen5 platforms, the platform BIOS specifies a 256-byte
interleave granularity window for host bridges when there is only
one target downstream. This leads to Linux rejecting the configuration
of a region with a x2 root with two x1 hostbridges.
Decoder Programming:
root - iw:2 ig:256
hb1 - iw:1 ig:256 (Linux expects 512)
hb2 - iw:1 ig:256 (Linux expects 512)
ep1 - iw:2 ig:256
ep2 - iw:2 ig:256
This change allows all decoders downstream of a passthrough decoder to
also be configured as passthrough (iw:1 ig:X), but still disallows
downstream decoders from applying subsequent interleaves.
e.g. in the above example if there was another decoder south of hb1
attempting to interleave 2 endpoints - Linux would enforce hb1.ig=512
because the southern decoder would have iw:2 and require ig=pig*piw.
[DJ: Fixed up against 6.15-rc1]
Signed-off-by: Gregory Price <gourry@gourry.net>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Tested-by: Li Zhijian <lizhijian@fujitsu.com>
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Link: https://patch.msgid.link/20250402232552.999634-1-gourry@gourry.net
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
Based on my comprehensive analysis of the commit and the surrounding
codebase, here is my assessment:
**YES**
This commit should be backported to stable kernel trees. Here's my
extensive analysis:
## Nature of the Fix
This is a **bug fix** that addresses a platform compatibility issue
where valid CXL configurations are incorrectly rejected by Linux. The
fix is for a specific scenario affecting **Zen5 BIOS implementations**
that specify 256-byte interleave granularity for host bridges with
single targets.
## Technical Analysis of the Change
The commit modifies line 1449 in `drivers/cxl/core/region.c`, changing:
```c
cxld->interleave_granularity != ig ||
```
to:
```c
(iw > 1 && cxld->interleave_granularity != ig) ||
```
This change **relaxes the granularity validation** specifically when `iw
== 1` (single interleave way/passthrough decoder). The logic is sound
because:
1. **When iw=1**: All memory accesses route to the single target
regardless of granularity, making granularity irrelevant for
addressing
2. **When iw>1**: The granularity validation remains strict to ensure
correct interleave routing
## Why This Qualifies for Stable Backporting
### 1. **Fixes User-Affecting Bug**
- Affects real hardware platforms (Zen5-based systems)
- Prevents legitimate CXL region configurations from working
- Users experience functional failures, not just degraded performance
### 2. **Minimal and Contained Change**
- Single line modification with clear conditional logic
- No architectural changes or new features
- Focused on a specific validation path in region setup
### 3. **Low Regression Risk**
- Only relaxes validation when it's mathematically unnecessary (iw=1)
- Maintains strict validation for interleaved configurations (iw>1)
- The change aligns with the fundamental CXL addressing principles
### 4. **Clear Stable Tree Criteria Match**
- **Important bugfix**: ✅ Enables CXL functionality on affected
platforms
- **Minimal risk**: ✅ Highly targeted change with clear conditions
- **Contained to subsystem**: ✅ Only affects CXL region validation logic
## Evidence from Similar Commits
Looking at the historical examples:
- **Similar Commit #2** was marked "YES" and had `Cc:
<stable@vger.kernel.org>` for a related granularity calculation fix
- The current commit follows the same pattern: targeted fix for
granularity validation issues
- No architectural changes or new feature introductions
## Platform Impact Assessment
The commit specifically mentions **Zen5 platforms** where BIOS specifies
problematic configurations that should be valid but are currently
rejected. This affects:
- Real shipping hardware
- Valid CXL memory configurations
- System functionality rather than optimization
## Code Quality and Safety
The fix:
- Preserves existing validation for interleaved cases (iw > 1)
- Only bypasses granularity checks when they're logically unnecessary
(iw = 1)
- Includes comprehensive review signatures from CXL subsystem
maintainers
- Has been tested according to the commit message
The change is mathematically correct: when there's only one target
(iw=1), granularity is irrelevant because all addresses map to the same
target regardless of the granularity value.
Therefore, this commit represents a **low-risk, high-value bugfix** that
enables proper CXL functionality on affected hardware platforms and
should be backported to stable trees to ensure users don't encounter
functional regressions on valid hardware configurations.
drivers/cxl/core/region.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
index 24b161c7749f9..7585f0302f3a2 100644
--- a/drivers/cxl/core/region.c
+++ b/drivers/cxl/core/region.c
@@ -1446,7 +1446,7 @@ static int cxl_port_setup_targets(struct cxl_port *port,
if (test_bit(CXL_REGION_F_AUTO, &cxlr->flags)) {
if (cxld->interleave_ways != iw ||
- cxld->interleave_granularity != ig ||
+ (iw > 1 && cxld->interleave_granularity != ig) ||
!region_res_match_cxl_range(p, &cxld->hpa_range) ||
((cxld->flags & CXL_DECODER_F_ENABLE) == 0)) {
dev_err(&cxlr->dev,
--
2.39.5
next prev parent reply other threads:[~2025-06-06 15:42 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-06 15:41 [PATCH AUTOSEL 6.15 01/21] cifs: Correctly set SMB1 SessionKey field in Session Setup Request Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 02/21] cifs: Fix cifs_query_path_info() for Windows NT servers Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 03/21] cifs: Fix encoding of SMB1 Session Setup NTLMSSP Request in non-UNICODE mode Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 04/21] NFSv4: Always set NLINK even if the server doesn't support it Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 05/21] NFSv4.2: fix listxattr to return selinux security label Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 06/21] NFSv4.2: fix setattr caching of TIME_[MODIFY|ACCESS]_SET when timestamps are delegated Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 07/21] mailbox: Not protect module_put with spin_lock_irqsave Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 08/21] mfd: max77541: Fix wakeup source leaks on device unbind Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 09/21] mfd: max14577: " Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 10/21] mfd: max77705: " Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 11/21] mfd: 88pm886: " Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 12/21] mfd: sprd-sc27xx: " Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 13/21] sunrpc: don't immediately retransmit on seqno miss Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 14/21] hwmon: (isl28022) Fix current reading calculation Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 15/21] dm vdo indexer: don't read request structure after enqueuing Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 16/21] leds: multicolor: Fix intensity setting while SW blinking Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 17/21] fuse: fix race between concurrent setattrs from multiple nodes Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 18/21] cxl/region: Add a dev_err() on missing target list entries Sasha Levin
2025-06-06 15:41 ` Sasha Levin [this message]
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 20/21] NFSv4: xattr handlers should check for absent nfs filehandles Sasha Levin
2025-06-06 15:41 ` [PATCH AUTOSEL 6.15 21/21] hwmon: (pmbus/max34440) Fix support for max34451 Sasha Levin
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=20250606154147.546388-19-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=alison.schofield@intel.com \
--cc=dan.j.williams@intel.com \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=gourry@gourry.net \
--cc=ira.weiny@intel.com \
--cc=lizhijian@fujitsu.com \
--cc=ming.li@zohomail.com \
--cc=patches@lists.linux.dev \
--cc=rrichter@amd.com \
--cc=stable@vger.kernel.org \
--cc=yaoxt.fnst@fujitsu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.