Commit 384a5301 authored by Yishai Hadas's avatar Yishai Hadas Committed by Alex Williamson
Browse files

vfio/virtio: Enable support for virtio-block live migration



With a functional and tested backend for virtio-block live migration,
add the virtio-block device ID to the pci_device_id table.

Currently, the driver supports legacy IO functionality only for
virtio-net, and it is accounted for in specific parts of the code.

To enforce this limitation, an explicit check for virtio-net, has been
added in virtiovf_support_legacy_io(). Once a backend implements legacy
IO functionality for virtio-block, the necessary support will be added
to the driver, and this additional check should be removed.

The module description was updated accordingly.

Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
Signed-off-by: default avatarYishai Hadas <yishaih@nvidia.com>
Link: https://lore.kernel.org/r/20250302162723.82578-1-yishaih@nvidia.com


Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
parent 0fd06844
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only
config VIRTIO_VFIO_PCI
	tristate "VFIO support for VIRTIO NET PCI VF devices"
	tristate "VFIO support for VIRTIO PCI VF devices"
	depends on VIRTIO_PCI
	select VFIO_PCI_CORE
	help
	  This provides migration support for VIRTIO NET PCI VF devices
	  using the VFIO framework. Migration support requires the
	  This provides migration support for VIRTIO NET and BLOCK PCI VF
	  devices using the VFIO framework. Migration support requires the
	  SR-IOV PF device to support specific VIRTIO extensions,
	  otherwise this driver provides no additional functionality
	  beyond vfio-pci.
+3 −1
Original line number Diff line number Diff line
@@ -382,7 +382,9 @@ static bool virtiovf_bar0_exists(struct pci_dev *pdev)

bool virtiovf_support_legacy_io(struct pci_dev *pdev)
{
	return virtio_pci_admin_has_legacy_io(pdev) && !virtiovf_bar0_exists(pdev);
	/* For now, the legacy IO functionality is supported only for virtio-net */
	return pdev->device == 0x1041 && virtio_pci_admin_has_legacy_io(pdev) &&
	       !virtiovf_bar0_exists(pdev);
}

int virtiovf_init_legacy_io(struct virtiovf_pci_core_device *virtvdev)
+3 −2
Original line number Diff line number Diff line
@@ -187,8 +187,9 @@ static void virtiovf_pci_remove(struct pci_dev *pdev)
}

static const struct pci_device_id virtiovf_pci_table[] = {
	/* Only virtio-net is supported/tested so far */
	/* Only virtio-net and virtio-block are supported/tested so far */
	{ PCI_DRIVER_OVERRIDE_DEVICE_VFIO(PCI_VENDOR_ID_REDHAT_QUMRANET, 0x1041) },
	{ PCI_DRIVER_OVERRIDE_DEVICE_VFIO(PCI_VENDOR_ID_REDHAT_QUMRANET, 0x1042) },
	{}
};

@@ -221,4 +222,4 @@ module_pci_driver(virtiovf_pci_driver);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Yishai Hadas <yishaih@nvidia.com>");
MODULE_DESCRIPTION(
	"VIRTIO VFIO PCI - User Level meta-driver for VIRTIO NET devices");
	"VIRTIO VFIO PCI - User Level meta-driver for VIRTIO NET and BLOCK devices");