From: Pavel Hrdina Date: Sun, 15 Feb 2026 17:19:23 +0000 (+0100) Subject: conf: Introduce virHostdevIsPCIDeviceWithIOMMUFD X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=97eed30948e980be8b7552fff637e828768854e4;p=thirdparty%2Flibvirt.git conf: Introduce virHostdevIsPCIDeviceWithIOMMUFD Signed-off-by: Pavel Hrdina Reviewed-by: Michal Privoznik --- 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;