From 76b720168bee49497519bbca2147cbd65ae7fcbf Mon Sep 17 00:00:00 2001 From: Pavel Hrdina Date: Sun, 15 Feb 2026 19:09:23 +0100 Subject: [PATCH] qemu_process: Refactor qemuProcessOpenVfioDeviceFd This will allow us reusing same code for hotplug support. As part of refactor remove redundant checks. Signed-off-by: Pavel Hrdina Reviewed-by: Michal Privoznik --- src/qemu/qemu_process.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index cc2a9c8abc..2bab46fca6 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7702,23 +7702,21 @@ qemuProcessOpenIommuFd(virDomainObj *vm) /** * qemuProcessOpenVfioDeviceFd: * @hostdev: host device definition - * @vfioFd: returned file descriptor * * Opens the VFIO device file descriptor for a hostdev. * - * Returns: FD on success, -1 on failure + * Returns: 0 on success, -1 on failure */ static int qemuProcessOpenVfioDeviceFd(virDomainHostdevDef *hostdev) { - if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS || - hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("VFIO FD only supported for PCI hostdevs")); + qemuDomainHostdevPrivate *hostdevPriv = QEMU_DOMAIN_HOSTDEV_PRIVATE(hostdev); + virDomainHostdevSubsysPCI *pci = &hostdev->source.subsys.u.pci; + + if ((hostdevPriv->vfioDeviceFd = virPCIDeviceOpenVfioFd(&pci->addr)) < 0) return -1; - } - return virPCIDeviceOpenVfioFd(&hostdev->source.subsys.u.pci.addr); + return 0; } /** @@ -7737,16 +7735,14 @@ qemuProcessOpenVfioFds(virDomainObj *vm) /* Check if we have any hostdevs that need VFIO FDs */ for (i = 0; i < vm->def->nhostdevs; i++) { virDomainHostdevDef *hostdev = vm->def->hostdevs[i]; - qemuDomainHostdevPrivate *hostdevPriv = QEMU_DOMAIN_HOSTDEV_PRIVATE(hostdev); 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) { /* Open VFIO device FD */ - hostdevPriv->vfioDeviceFd = qemuProcessOpenVfioDeviceFd(hostdev); - if (hostdevPriv->vfioDeviceFd == -1) - return -1; + if (qemuProcessOpenVfioDeviceFd(hostdev) < 0) + return -1; /* Open IOMMU FD */ if (qemuProcessOpenIommuFd(vm) < 0) -- 2.47.3