[PATCH v4 11/27] vfio/cxl: Own the whole component register BAR
From: mhonap
Date: Thu Aug 13 2026 - 05:46:22 EST
From: Manish Honap <mhonap@xxxxxxxxxx>
devm_cxl_probe_mem() maps the component registers through the CXL core.
By default the core claims each HDM/RAS sub-block, which then collides
with the full-BAR request that vfio-pci makes when the guest opens the
device.
Discover the component registers into the device reg_map and pass
bar_owned to cxl_pci_setup_regs(), so the core maps the sub-blocks
without claiming them and vfio-pci owns the whole BAR.
Signed-off-by: Manish Honap <mhonap@xxxxxxxxxx>
---
drivers/vfio/pci/cxl/vfio_cxl_core.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/vfio/pci/cxl/vfio_cxl_core.c b/drivers/vfio/pci/cxl/vfio_cxl_core.c
index 7edc53b25576..966b7c22a6ac 100644
--- a/drivers/vfio/pci/cxl/vfio_cxl_core.c
+++ b/drivers/vfio/pci/cxl/vfio_cxl_core.c
@@ -10,6 +10,7 @@
#include <linux/range.h>
#include <linux/vfio_pci_core.h>
#include <cxl/cxl.h>
+#include <cxl/pci.h>
/**
* struct vfio_cxl_state - per-device state for a vfio-cxl device
@@ -70,6 +71,16 @@ static int vfio_cxl_init_device(struct vfio_pci_core_device *vdev)
if (!cxl)
return -ENOMEM;
+ /*
+ * vfio-pci requests the whole component BAR when the guest opens the
+ * device. Declare the BAR owned so the CXL core maps the HDM/RAS
+ * sub-blocks without claiming them and that request does not collide.
+ */
+ ret = cxl_pci_setup_regs(pdev, CXL_REGLOC_RBI_COMPONENT,
+ &cxl->cxlds.reg_map, true);
+ if (ret)
+ return ret;
+
ret = cxl_set_capacity(&cxl->cxlds, hdm_size);
if (ret)
return ret;
--
2.25.1