From 24f32b0d564d4c782b4a39990ef6508d9260774a Mon Sep 17 00:00:00 2001 Message-ID: <24f32b0d564d4c782b4a39990ef6508d9260774a.1771423658.git.jdenemar@redhat.com> 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 (cherry picked from commit 76b720168bee49497519bbca2147cbd65ae7fcbf) Resolves: https://issues.redhat.com/browse/RHEL-150351 Signed-off-by: Pavel Hrdina --- src/qemu/qemu_process.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 55cd930df8..7e32325fa0 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7698,23 +7698,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")); - return -1; - } + qemuDomainHostdevPrivate *hostdevPriv = QEMU_DOMAIN_HOSTDEV_PRIVATE(hostdev); + virDomainHostdevSubsysPCI *pci = &hostdev->source.subsys.u.pci; - return virPCIDeviceOpenVfioFd(&hostdev->source.subsys.u.pci.addr); + if ((hostdevPriv->vfioDeviceFd = virPCIDeviceOpenVfioFd(&pci->addr)) < 0) + return -1; + + return 0; } /** @@ -7733,16 +7731,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.53.0