Add command-line parameters (x-plugin-path and x-plugin-arg) of migration plugin for VFIO PCI functions. x-plugin-path indicates the path of a dynamic load library and x-plugin-arg is the necessary parameter to load and use it. A typical example is, if the plugin communicates with the agent running on IPU/DPU backend SOC through network, the argument should be the IP and Port of agent. The usage as follows:
-device vfio-pci,id=$ID,host=$bdf,x-enable-migration,\ x-plugin-path=$plugin_path,x-plugin-arg=<IP:Port> Signed-off-by: Lei Rao <lei....@intel.com> Reviewed-by: Eddie Dong <eddie.d...@intel.com> --- hw/vfio/pci.c | 2 ++ include/hw/vfio/vfio-common.h | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 939dcc3d4a..1553ba7116 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3309,6 +3309,8 @@ static Property vfio_pci_dev_properties[] = { qdev_prop_nv_gpudirect_clique, uint8_t), DEFINE_PROP_OFF_AUTO_PCIBAR("x-msix-relocation", VFIOPCIDevice, msix_relo, OFF_AUTOPCIBAR_OFF), + DEFINE_PROP_STRING("x-plugin-path", VFIOPCIDevice, vbasedev.desc.path), + DEFINE_PROP_STRING("x-plugin-arg", VFIOPCIDevice, vbasedev.desc.arg), /* * TODO - support passed fds... is this necessary? * DEFINE_PROP_STRING("vfiofd", VFIOPCIDevice, vfiofd_name), diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index be8adf890f..45d6d75284 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -58,6 +58,11 @@ typedef struct VFIORegion { uint8_t nr; /* cache the region number for debug */ } VFIORegion; +struct vfio_migration_plugin_desc { + char *path; + char *arg; +}; + typedef struct VFIOMigrationOps VFIOMigrationOps; typedef struct VFIOMigration { @@ -144,6 +149,7 @@ typedef struct VFIODevice { unsigned int num_regions; unsigned int flags; VFIOMigration *migration; + struct vfio_migration_plugin_desc desc; Error *migration_blocker; OnOffAuto pre_copy_dirty_page_tracking; } VFIODevice; -- 2.32.0