Eliminate code duplication by using the new helpers qemuPrepareHostdevPCIDevices and qemuDomainReAttachHostdevDevices. This reduces the number of open coded calls to pciResetDevice. Cc: Alex Williamson <alex.williamson@xxxxxxxxxx> Cc: Don Dutile <ddutile@xxxxxxxxxx> Cc: Chris Lalancette <clalance@xxxxxxxxxx> Cc: Mark McLoughlin <markmc@xxxxxxxxxx> Signed-off-by: Chris Wright <chrisw@xxxxxxxxxx> --- src/qemu/qemu_driver.c | 37 +++---------------------------------- 1 files changed, 3 insertions(+), 34 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index d8288da..20946e6 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7831,7 +7831,6 @@ static int qemudDomainAttachHostPciDevice(struct qemud_driver *driver, unsigned long long qemuCmdFlags) { qemuDomainObjPrivatePtr priv = vm->privateData; - pciDevice *pci; int ret; char *devstr = NULL; int configfd = -1; @@ -7842,25 +7841,8 @@ static int qemudDomainAttachHostPciDevice(struct qemud_driver *driver, return -1; } - pci = pciGetDevice(hostdev->source.subsys.u.pci.domain, - hostdev->source.subsys.u.pci.bus, - hostdev->source.subsys.u.pci.slot, - hostdev->source.subsys.u.pci.function); - if (!pci) - return -1; - - if (!pciDeviceIsAssignable(pci, !driver->relaxedACS) || - (hostdev->managed && pciDettachDevice(pci, driver->activePciHostdevs) < 0) || - pciResetDevice(pci, driver->activePciHostdevs) < 0) { - pciFreeDevice(pci); - return -1; - } - - if (pciDeviceListAdd(driver->activePciHostdevs, pci) < 0) { - pciFreeDevice(pci); - return -1; - } - pci = NULL; /* activePciHostdevs owns the 'pci' reference now */ + if (qemuPrepareHostdevPCIDevices(driver, &hostdev, 1)) + return -1; if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { if (qemuAssignDeviceHostdevAlias(vm->def, hostdev, -1) < 0) @@ -7928,20 +7910,7 @@ error: qemuDomainPCIAddressReleaseAddr(priv->pciaddrs, &hostdev->info) < 0) VIR_WARN0("Unable to release PCI address on host device"); - pci = pciGetDevice(hostdev->source.subsys.u.pci.domain, - hostdev->source.subsys.u.pci.bus, - hostdev->source.subsys.u.pci.slot, - hostdev->source.subsys.u.pci.function); - - pciDeviceListDel(driver->activePciHostdevs, pci); - - if (pciResetDevice(pci, driver->activePciHostdevs) < 0) - VIR_WARN0("Unable to reset PCI device after assign failure"); - else if (hostdev->managed && - pciReAttachDevice(pci, driver->activePciHostdevs) < 0) - VIR_WARN0("Unable to re-attach PCI device after assign failure"); - pciFreeDevice(pci); - + qemuDomainReAttachHostdevDevices(driver, &hostdev, 1); VIR_FREE(devstr); VIR_FREE(configfd_name); -- 1.7.1.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list