* [PATCH v2 0/2] cxl/pci: Fix the incorrect check of pci_config_read/write*() returns
@ 2026-06-04 18:01 Dave Jiang
2026-06-04 18:01 ` [PATCH v2 1/2] cxl/pci: Fix the incorrect check of pci_read_config_word() return Dave Jiang
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Dave Jiang @ 2026-06-04 18:01 UTC (permalink / raw)
To: linux-cxl; +Cc: dave, jic23, alison.schofield, djbw, icheng
v2:
- Fixed up additional bits (Alison)
- Fix up fixes tag (Alison)
The patches are inspired by comments from Richard Cheng WRT pci config
accessors return PCIBIOS errors that are positive integers rather than
negative errnos. I went and audited the cxl PCI code and found a few
locations that need to be fixed. There are other locations that may
trigger issues, but at this point we'll fix them as they happen.
Dave Jiang (2):
cxl/pci: Fix the incorrect check of pci_read_config_word() return
cxl/pci: Convert PCIBIOS errors to errno on DVSEC config accesses
drivers/cxl/core/pci.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
base-commit: e43ffb69e0438cddd72aaa30898b4dc446f664f8
--
2.54.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/2] cxl/pci: Fix the incorrect check of pci_read_config_word() return
2026-06-04 18:01 [PATCH v2 0/2] cxl/pci: Fix the incorrect check of pci_config_read/write*() returns Dave Jiang
@ 2026-06-04 18:01 ` Dave Jiang
2026-06-04 18:01 ` [PATCH v2 2/2] cxl/pci: Convert PCIBIOS errors to errno on DVSEC config accesses Dave Jiang
2026-06-04 23:10 ` [PATCH v2 0/2] cxl/pci: Fix the incorrect check of pci_config_read/write*() returns Dave Jiang
2 siblings, 0 replies; 5+ messages in thread
From: Dave Jiang @ 2026-06-04 18:01 UTC (permalink / raw)
To: linux-cxl; +Cc: dave, jic23, alison.schofield, djbw, icheng
pci_read_config_word() returns PCIBIOS_* status on error which are
positive values. The check should be for non-zero values to indicate
error. Fix cxl_set_mem_enable() to check for non-zero return value
instead of negative value.
While fixing this, also convert the error to negative errno value when
returning on error path.
Fixes: 34e37b4c432c ("cxl/port: Enable HDM Capability after validating DVSEC Ranges")
Reviewed-by: Richard Cheng <icheng@nvidia.com>
Reviewed-by: Jonathan Cameron <jic23@kernel.org>
Reviewed-by: Alison Schofield <alison.schofield@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
---
drivers/cxl/core/pci.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/cxl/core/pci.c b/drivers/cxl/core/pci.c
index d1f487b3d809..43885c59a7f2 100644
--- a/drivers/cxl/core/pci.c
+++ b/drivers/cxl/core/pci.c
@@ -187,8 +187,8 @@ static int cxl_set_mem_enable(struct cxl_dev_state *cxlds, u16 val)
int rc;
rc = pci_read_config_word(pdev, d + PCI_DVSEC_CXL_CTRL, &ctrl);
- if (rc < 0)
- return rc;
+ if (rc)
+ return pcibios_err_to_errno(rc);
if ((ctrl & PCI_DVSEC_CXL_MEM_ENABLE) == val)
return 1;
@@ -196,8 +196,8 @@ static int cxl_set_mem_enable(struct cxl_dev_state *cxlds, u16 val)
ctrl |= val;
rc = pci_write_config_word(pdev, d + PCI_DVSEC_CXL_CTRL, ctrl);
- if (rc < 0)
- return rc;
+ if (rc)
+ return pcibios_err_to_errno(rc);
return 0;
}
--
2.54.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] cxl/pci: Convert PCIBIOS errors to errno on DVSEC config accesses
2026-06-04 18:01 [PATCH v2 0/2] cxl/pci: Fix the incorrect check of pci_config_read/write*() returns Dave Jiang
2026-06-04 18:01 ` [PATCH v2 1/2] cxl/pci: Fix the incorrect check of pci_read_config_word() return Dave Jiang
@ 2026-06-04 18:01 ` Dave Jiang
2026-06-04 20:06 ` Alison Schofield
2026-06-04 23:10 ` [PATCH v2 0/2] cxl/pci: Fix the incorrect check of pci_config_read/write*() returns Dave Jiang
2 siblings, 1 reply; 5+ messages in thread
From: Dave Jiang @ 2026-06-04 18:01 UTC (permalink / raw)
To: linux-cxl; +Cc: dave, jic23, alison.schofield, djbw, icheng
PCI config space accessors return positive PCIBIOS_* status codes on
failure that are positive integers. Several DVSEC accesses in the CXL
core propagated these raw values to callers that test for failure against
less than 0. Thus silently misinterpret the return value as success.
Convert the postive error values to negative errno values so the checks
are correct on error paths.
While the chances of a config access failure are low, fix for correctness
and to avoid confusion in the future when more DVSEC accesses are added.
Fixes: 14d788740774 ("cxl/mem: Consolidate CXL DVSEC Range enumeration in the core")
Fixes: ce17ad0d5498 ("cxl: Wait Memory_Info_Valid before access memory related info")
Reviewed-by: Richard Cheng <icheng@nvidia.com>
Reviewed-by: Jonathan Cameron <jic23@kernel.org>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
---
v2:
- Fixup cxl_dvsec_mem_range_active() and cxl_awai_media_ready(). (Alison)
- Fix fixes tag (Alison)
---
drivers/cxl/core/pci.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/cxl/core/pci.c b/drivers/cxl/core/pci.c
index 43885c59a7f2..e4338fd7e01b 100644
--- a/drivers/cxl/core/pci.c
+++ b/drivers/cxl/core/pci.c
@@ -89,7 +89,7 @@ static int cxl_dvsec_mem_range_valid(struct cxl_dev_state *cxlds, int id)
d + PCI_DVSEC_CXL_RANGE_SIZE_LOW(id),
&temp);
if (rc)
- return rc;
+ return pcibios_err_to_errno(rc);
valid = FIELD_GET(PCI_DVSEC_CXL_MEM_INFO_VALID, temp);
if (valid)
@@ -123,7 +123,7 @@ static int cxl_dvsec_mem_range_active(struct cxl_dev_state *cxlds, int id)
rc = pci_read_config_dword(
pdev, d + PCI_DVSEC_CXL_RANGE_SIZE_LOW(id), &temp);
if (rc)
- return rc;
+ return pcibios_err_to_errno(rc);
active = FIELD_GET(PCI_DVSEC_CXL_MEM_ACTIVE, temp);
if (active)
@@ -156,7 +156,7 @@ int cxl_await_media_ready(struct cxl_dev_state *cxlds)
rc = pci_read_config_word(pdev,
d + PCI_DVSEC_CXL_CAP, &cap);
if (rc)
- return rc;
+ return pcibios_err_to_errno(rc);
hdm_count = FIELD_GET(PCI_DVSEC_CXL_HDM_COUNT, cap);
for (i = 0; i < hdm_count; i++) {
@@ -275,7 +275,7 @@ int cxl_dvsec_rr_decode(struct cxl_dev_state *cxlds,
rc = pci_read_config_word(pdev, d + PCI_DVSEC_CXL_CAP, &cap);
if (rc)
- return rc;
+ return pcibios_err_to_errno(rc);
if (!(cap & PCI_DVSEC_CXL_MEM_CAPABLE)) {
dev_dbg(dev, "Not MEM Capable\n");
@@ -299,7 +299,7 @@ int cxl_dvsec_rr_decode(struct cxl_dev_state *cxlds,
*/
rc = pci_read_config_word(pdev, d + PCI_DVSEC_CXL_CTRL, &ctrl);
if (rc)
- return rc;
+ return pcibios_err_to_errno(rc);
info->mem_enabled = FIELD_GET(PCI_DVSEC_CXL_MEM_ENABLE, ctrl);
if (!info->mem_enabled)
@@ -316,14 +316,14 @@ int cxl_dvsec_rr_decode(struct cxl_dev_state *cxlds,
rc = pci_read_config_dword(
pdev, d + PCI_DVSEC_CXL_RANGE_SIZE_HIGH(i), &temp);
if (rc)
- return rc;
+ return pcibios_err_to_errno(rc);
size = (u64)temp << 32;
rc = pci_read_config_dword(
pdev, d + PCI_DVSEC_CXL_RANGE_SIZE_LOW(i), &temp);
if (rc)
- return rc;
+ return pcibios_err_to_errno(rc);
size |= temp & PCI_DVSEC_CXL_MEM_SIZE_LOW;
if (!size) {
@@ -333,14 +333,14 @@ int cxl_dvsec_rr_decode(struct cxl_dev_state *cxlds,
rc = pci_read_config_dword(
pdev, d + PCI_DVSEC_CXL_RANGE_BASE_HIGH(i), &temp);
if (rc)
- return rc;
+ return pcibios_err_to_errno(rc);
base = (u64)temp << 32;
rc = pci_read_config_dword(
pdev, d + PCI_DVSEC_CXL_RANGE_BASE_LOW(i), &temp);
if (rc)
- return rc;
+ return pcibios_err_to_errno(rc);
base |= temp & PCI_DVSEC_CXL_MEM_BASE_LOW;
--
2.54.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] cxl/pci: Convert PCIBIOS errors to errno on DVSEC config accesses
2026-06-04 18:01 ` [PATCH v2 2/2] cxl/pci: Convert PCIBIOS errors to errno on DVSEC config accesses Dave Jiang
@ 2026-06-04 20:06 ` Alison Schofield
0 siblings, 0 replies; 5+ messages in thread
From: Alison Schofield @ 2026-06-04 20:06 UTC (permalink / raw)
To: Dave Jiang; +Cc: linux-cxl, dave, jic23, djbw, icheng
On Thu, Jun 04, 2026 at 11:01:54AM -0700, Dave Jiang wrote:
> PCI config space accessors return positive PCIBIOS_* status codes on
> failure that are positive integers. Several DVSEC accesses in the CXL
> core propagated these raw values to callers that test for failure against
> less than 0. Thus silently misinterpret the return value as success.
>
> Convert the postive error values to negative errno values so the checks
positive
> are correct on error paths.
>
> While the chances of a config access failure are low, fix for correctness
> and to avoid confusion in the future when more DVSEC accesses are added.
>
Reviewed-by: Alison Schofield <alison.schofield@intel.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 0/2] cxl/pci: Fix the incorrect check of pci_config_read/write*() returns
2026-06-04 18:01 [PATCH v2 0/2] cxl/pci: Fix the incorrect check of pci_config_read/write*() returns Dave Jiang
2026-06-04 18:01 ` [PATCH v2 1/2] cxl/pci: Fix the incorrect check of pci_read_config_word() return Dave Jiang
2026-06-04 18:01 ` [PATCH v2 2/2] cxl/pci: Convert PCIBIOS errors to errno on DVSEC config accesses Dave Jiang
@ 2026-06-04 23:10 ` Dave Jiang
2 siblings, 0 replies; 5+ messages in thread
From: Dave Jiang @ 2026-06-04 23:10 UTC (permalink / raw)
To: linux-cxl; +Cc: dave, jic23, alison.schofield, djbw, icheng
On 6/4/26 11:01 AM, Dave Jiang wrote:
> v2:
> - Fixed up additional bits (Alison)
> - Fix up fixes tag (Alison)
>
> The patches are inspired by comments from Richard Cheng WRT pci config
> accessors return PCIBIOS errors that are positive integers rather than
> negative errnos. I went and audited the cxl PCI code and found a few
> locations that need to be fixed. There are other locations that may
> trigger issues, but at this point we'll fix them as they happen.
>
>
> Dave Jiang (2):
> cxl/pci: Fix the incorrect check of pci_read_config_word() return
> cxl/pci: Convert PCIBIOS errors to errno on DVSEC config accesses
>
> drivers/cxl/core/pci.c | 26 +++++++++++++-------------
> 1 file changed, 13 insertions(+), 13 deletions(-)
>
>
> base-commit: e43ffb69e0438cddd72aaa30898b4dc446f664f8
merged to cxl/next
66782cfa0085
26aa60e02762
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-06-04 23:10 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-04 18:01 [PATCH v2 0/2] cxl/pci: Fix the incorrect check of pci_config_read/write*() returns Dave Jiang
2026-06-04 18:01 ` [PATCH v2 1/2] cxl/pci: Fix the incorrect check of pci_read_config_word() return Dave Jiang
2026-06-04 18:01 ` [PATCH v2 2/2] cxl/pci: Convert PCIBIOS errors to errno on DVSEC config accesses Dave Jiang
2026-06-04 20:06 ` Alison Schofield
2026-06-04 23:10 ` [PATCH v2 0/2] cxl/pci: Fix the incorrect check of pci_config_read/write*() returns Dave Jiang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox