Re: [PATCH] cxl/acpi: fix CXL_ACPI=y + CXL_PMEM=m link failure

From: Song Liu

Date: Fri Mar 06 2026 - 17:18:38 EST


On Thu, Mar 5, 2026 at 5:23 PM <dan.j.williams@xxxxxxxxx> wrote:
>
> 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>
> > ---
> > 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);
>
> I think we want this conflict to be resolved at build time. The nice
> thing about a new CONFIG_CXL_ACPI_PMEM symbol is you can check your
> config to find out why your CXL PMEM is not working. Otherwise,
> IS_REACHABLE() hides this subtelty.

Can we fix this with something like the following?

Thanks,
Song

diff --git i/drivers/cxl/Kconfig w/drivers/cxl/Kconfig
index 4589bf11d3fe..0290e0f22cf8 100644
--- i/drivers/cxl/Kconfig
+++ w/drivers/cxl/Kconfig
@@ -59,6 +59,7 @@ config CXL_ACPI
tristate "CXL ACPI: Platform Support"
depends on ACPI
depends on ACPI_NUMA
+ depends on CXL_PMEM
default CXL_BUS
select ACPI_TABLE_LIB
select ACPI_HMAT