Signed-off-by: Pavel Hrdina <[email protected]>
---
 src/conf/domain_conf.c   | 15 +++++++++++++++
 src/conf/domain_conf.h   |  3 +++
 src/libvirt_private.syms |  1 +
 src/qemu/qemu_process.c  |  5 +----
 4 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index e3c69aee4d..98d34f408d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -32939,6 +32939,21 @@ virHostdevIsPCIDevice(const virDomainHostdevDef 
*hostdev)
 }
 
 
+/**
+ * virHostdevIsPCIDeviceWithIOMMUFD:
+ * @hostdev: host device to check
+ *
+ * Returns true if @hostdev is a PCI device with IOMMUFD enabled, false 
otherwise.
+ */
+bool
+virHostdevIsPCIDeviceWithIOMMUFD(const virDomainHostdevDef *hostdev)
+{
+    return virHostdevIsPCIDevice(hostdev) &&
+        hostdev->source.subsys.u.pci.driver.name == 
VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO &&
+        hostdev->source.subsys.u.pci.driver.iommufd == VIR_TRISTATE_BOOL_YES;
+}
+
+
 static void
 virDomainObjGetMessagesIOErrorsSrc(virStorageSource *src,
                                    const char *diskdst,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index be96617981..f98fed650a 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -4720,6 +4720,9 @@ virHostdevIsMdevDevice(const virDomainHostdevDef *hostdev)
 bool
 virHostdevIsPCIDevice(const virDomainHostdevDef *hostdev)
     ATTRIBUTE_NONNULL(1);
+bool
+virHostdevIsPCIDeviceWithIOMMUFD(const virDomainHostdevDef *hostdev)
+    ATTRIBUTE_NONNULL(1);
 
 void
 virDomainObjGetMessagesIOErrorsChain(virStorageSource *src,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 4d29512e0b..15a56a262a 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -813,6 +813,7 @@ virDomainQemuMonitorEventNew;
 virDomainQemuMonitorEventStateRegisterID;
 virHostdevIsMdevDevice;
 virHostdevIsPCIDevice;
+virHostdevIsPCIDeviceWithIOMMUFD;
 virHostdevIsSCSIDevice;
 
 
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 2bab46fca6..cfc30dcbe4 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -7736,10 +7736,7 @@ qemuProcessOpenVfioFds(virDomainObj *vm)
     for (i = 0; i < vm->def->nhostdevs; i++) {
         virDomainHostdevDef *hostdev = vm->def->hostdevs[i];
 
-        if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
-            hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI 
&&
-            hostdev->source.subsys.u.pci.driver.name == 
VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO &&
-            hostdev->source.subsys.u.pci.driver.iommufd == 
VIR_TRISTATE_BOOL_YES) {
+        if (virHostdevIsPCIDeviceWithIOMMUFD(hostdev)) {
             /* Open VFIO device FD */
             if (qemuProcessOpenVfioDeviceFd(hostdev) < 0)
                 return -1;
-- 
2.53.0

Reply via email to