Re: [PATCH] cxl/acpi: fix CXL_ACPI=y + CXL_PMEM=m link failure
From: Harshit Mogalapalli
Date: Tue Mar 03 2026 - 04:11:26 EST
Hi Gregory,
On 03/03/26 01:34, Gregory Price wrote:
Commit e7e222ad73d9 ("cxl: Move devm_cxl_add_nvdimm_bridge() to
cxl_pmem.ko") moved devm_cxl_add_nvdimm_bridge() from cxl_core into
cxl_pmem, creating a symbol dependency from cxl_acpi to cxl_pmem.
When CXL_ACPI=y and CXL_PMEM=m, the built-in cxl_acpi attempts to
link against a non-built-in cxl_pmem, which the linker cannot resolve.
CXL_PMEM depends on LIBNVDIMM, so LIBNVDIMM=m constrains CXL_PMEM to
at most =m.
Change IS_ENABLED() to IS_REACHABLE(), which returns false when a
built-in caller references a modular target, preventing the link error.
The result is if the pmem/nvdimm symbols are not reachable at build
time, then at runtime it will always return -ENODEV.
Fixes: e7e222ad73d9 ("cxl: Move devm_cxl_add_nvdimm_bridge() to cxl_pmem.ko")
Signed-off-by: Gregory Price <gourry@xxxxxxxxxx>
We have run into the same issue as we have CXL_PMEM=m and CXL_ACPI=y, and this fix looks good to me.
Reviewed-by: Harshit Mogalapalli <harshit.m.mogalapalli@xxxxxxxxxx>
also, gave this patch a go with our config:
Tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@xxxxxxxxxx>
Thanks,
Harshit
---
drivers/cxl/acpi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/cxl/acpi.c b/drivers/cxl/acpi.c
index 127537628817..7065413eda9f 100644
--- a/drivers/cxl/acpi.c
+++ b/drivers/cxl/acpi.c
@@ -952,7 +952,7 @@ static int cxl_acpi_probe(struct platform_device *pdev)
if (rc < 0)
return rc;
- if (IS_ENABLED(CONFIG_CXL_PMEM))
+ if (IS_REACHABLE(CONFIG_CXL_PMEM))
rc = device_for_each_child(&root_port->dev, root_port,
add_root_nvdimm_bridge);
if (rc < 0)