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

From: Jonathan Cameron

Date: Tue Mar 03 2026 - 05:17:19 EST


On Mon, 2 Mar 2026 15:04:29 -0500
Gregory Price <gourry@xxxxxxxxxx> 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>

What's the impact of this build combination wrt to whether the result is
actually useful? Is there any point in building CXL_PMEM as a module
without this call being made? I can't remember and normally don't care
much about PMEM :)

> ---
> 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)