[PATCH v5 08/27] vfio/pci: Fall back to plain vfio-pci when CXL init fails

From: mhonap

Date: Wed Sep 16 2026 - 14:46:15 EST


From: Manish Honap <mhonap@xxxxxxxxxx>

A CXL Type-2 device is also a valid plain vfio-pci device. If the
vfio-cxl provider cannot bring it up as Type-2, failing the bind would
regress a device that previously worked as plain vfio-pci.

Make a non-deferred CXL init failure non-fatal: log it, drop the provider
reference, leave cxl_ops NULL, and continue driving the device as plain
vfio-pci. The -EPROBE_DEFER path added earlier still retries rather than
falling back.

Assisted-by: LLM
Signed-off-by: Manish Honap <mhonap@xxxxxxxxxx>
---
drivers/vfio/pci/vfio_pci_core.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c
index a63a4f5228b8..9a75c30b67e2 100644
--- a/drivers/vfio/pci/vfio_pci_core.c
+++ b/drivers/vfio/pci/vfio_pci_core.c
@@ -2271,9 +2271,17 @@ static int vfio_pci_core_cxl_init(struct vfio_pci_core_device *vdev)
vfio_pci_put_cxl_ops(ops);
return ret;
}
+ /*
+ * Any other failure is non-fatal: a CXL device that cannot be brought
+ * up as Type-2 still works as plain vfio-pci, so log and continue
+ * rather than failing the bind.
+ */
if (ret) {
+ pci_warn(vdev->pdev,
+ "CXL init failed (%d), continuing as plain vfio-pci\n",
+ ret);
vfio_pci_put_cxl_ops(ops);
- return ret;
+ return 0;
}

vdev->cxl_ops = ops;
--
2.25.1