From: Manish Honap <[email protected]> Add the vfio-cxl module that vfio-pci-core loads on demand for a CXL Type-2 device, registering its callbacks at module_init.
vfio-cxl is a feature of vfio-pci-core rather than a variant driver, so its Kconfig sources above the variant drivers and its objects link right after vfio-pci-core while still being loaded on demand through the vfio-cxl MODULE_ALIAS. Assisted-by: LLM Signed-off-by: Manish Honap <[email protected]> --- MAINTAINERS | 7 ++++ drivers/vfio/pci/Kconfig | 2 + drivers/vfio/pci/Makefile | 2 + drivers/vfio/pci/cxl/Kconfig | 11 +++++ drivers/vfio/pci/cxl/Makefile | 3 ++ drivers/vfio/pci/cxl/vfio_cxl_core.c | 61 ++++++++++++++++++++++++++++ 6 files changed, 86 insertions(+) create mode 100644 drivers/vfio/pci/cxl/Kconfig create mode 100644 drivers/vfio/pci/cxl/Makefile create mode 100644 drivers/vfio/pci/cxl/vfio_cxl_core.c diff --git a/MAINTAINERS b/MAINTAINERS index 2037501cd621..75d472d7ca07 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -28639,6 +28639,13 @@ L: [email protected] S: Maintained F: drivers/vfio/cdx/* +VFIO CXL DRIVER +M: Manish Honap <[email protected]> +L: [email protected] +L: [email protected] +S: Supported +F: drivers/vfio/pci/cxl/ + VFIO DRIVER M: Alex Williamson <[email protected]> L: [email protected] diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig index 296bf01e185e..4cd6acd36053 100644 --- a/drivers/vfio/pci/Kconfig +++ b/drivers/vfio/pci/Kconfig @@ -58,6 +58,8 @@ config VFIO_PCI_ZDEV_KVM config VFIO_PCI_DMABUF def_bool y if VFIO_PCI_CORE && PCI_P2PDMA && DMA_SHARED_BUFFER +source "drivers/vfio/pci/cxl/Kconfig" + source "drivers/vfio/pci/mlx5/Kconfig" source "drivers/vfio/pci/ism/Kconfig" diff --git a/drivers/vfio/pci/Makefile b/drivers/vfio/pci/Makefile index 6138f1bf241d..b65117d8d463 100644 --- a/drivers/vfio/pci/Makefile +++ b/drivers/vfio/pci/Makefile @@ -5,6 +5,8 @@ vfio-pci-core-$(CONFIG_VFIO_PCI_ZDEV_KVM) += vfio_pci_zdev.o vfio-pci-core-$(CONFIG_VFIO_PCI_DMABUF) += vfio_pci_dmabuf.o obj-$(CONFIG_VFIO_PCI_CORE) += vfio-pci-core.o +obj-$(CONFIG_VFIO_CXL) += cxl/ + vfio-pci-y := vfio_pci.o vfio-pci-$(CONFIG_VFIO_PCI_IGD) += vfio_pci_igd.o obj-$(CONFIG_VFIO_PCI) += vfio-pci.o diff --git a/drivers/vfio/pci/cxl/Kconfig b/drivers/vfio/pci/cxl/Kconfig new file mode 100644 index 000000000000..1392fa4ed15d --- /dev/null +++ b/drivers/vfio/pci/cxl/Kconfig @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: GPL-2.0-only +config VFIO_CXL + tristate "VFIO support for CXL Type-2 devices" + depends on CXL_BUS && CXL_MEM + select VFIO_PCI_CORE + help + Add CXL HDM handling to vfio-pci so a CXL Type-2 device, such as a + CXL-attached accelerator, can be assigned to a virtual machine. + vfio-pci loads this module on demand when it binds a CXL device. + + If you don't know what to do here, say N. diff --git a/drivers/vfio/pci/cxl/Makefile b/drivers/vfio/pci/cxl/Makefile new file mode 100644 index 000000000000..8501bf626108 --- /dev/null +++ b/drivers/vfio/pci/cxl/Makefile @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: GPL-2.0-only +obj-$(CONFIG_VFIO_CXL) += vfio-cxl.o +vfio-cxl-y := vfio_cxl_core.o diff --git a/drivers/vfio/pci/cxl/vfio_cxl_core.c b/drivers/vfio/pci/cxl/vfio_cxl_core.c new file mode 100644 index 000000000000..cd5d41856404 --- /dev/null +++ b/drivers/vfio/pci/cxl/vfio_cxl_core.c @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * VFIO support for CXL Type-2 devices. + * + * Copyright (c) 2026 NVIDIA Corporation & Affiliates + */ + +#include <linux/module.h> +#include <linux/vfio_pci_core.h> + +static int vfio_cxl_init_device(struct vfio_pci_core_device *vdev) +{ + return 0; +} + +static void vfio_cxl_release_device(struct vfio_pci_core_device *vdev) +{ +} + +static int vfio_cxl_open_device(struct vfio_pci_core_device *vdev) +{ + return 0; +} + +static void vfio_cxl_close_device(struct vfio_pci_core_device *vdev) +{ +} + +static void vfio_cxl_reset_prepare(struct vfio_pci_core_device *vdev) +{ +} + +static void vfio_cxl_reset_done(struct vfio_pci_core_device *vdev) +{ +} + +static const struct vfio_cxl_ops vfio_cxl_ops = { + .init = vfio_cxl_init_device, + .release = vfio_cxl_release_device, + .open_device = vfio_cxl_open_device, + .close_device = vfio_cxl_close_device, + .reset_prepare = vfio_cxl_reset_prepare, + .reset_done = vfio_cxl_reset_done, + .owner = THIS_MODULE, +}; + +static int __init vfio_cxl_init(void) +{ + return vfio_pci_core_register_cxl_ops(&vfio_cxl_ops); +} + +static void __exit vfio_cxl_exit(void) +{ + vfio_pci_core_unregister_cxl_ops(&vfio_cxl_ops); +} + +module_init(vfio_cxl_init); +module_exit(vfio_cxl_exit); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("VFIO support for CXL Type-2 devices"); -- 2.25.1

