From a4efb2e33560899b601d72d866dbfec3d0abf858 Mon Sep 17 00:00:00 2001 From: Wen Congyang Date: Mon, 28 Mar 2011 15:01:19 +0800 Subject: [PATCH] reattach pci devices when qemuPrepareHostdevPCIDevices() failed Reattach all pci devices that we detached when qemuPrepareHostdevPCIDevices() failed. --- src/qemu/qemu_hostdev.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c index 30db0e2dd0..7f5ad516ed 100644 --- a/src/qemu/qemu_hostdev.c +++ b/src/qemu/qemu_hostdev.c @@ -127,11 +127,11 @@ int qemuPrepareHostdevPCIDevices(struct qemud_driver *driver, for (i = 0; i < pciDeviceListCount(pcidevs); i++) { pciDevice *dev = pciDeviceListGet(pcidevs, i); if (!pciDeviceIsAssignable(dev, !driver->relaxedACS)) - goto cleanup; + goto reattachdevs; if (pciDeviceGetManaged(dev) && pciDettachDevice(dev, driver->activePciHostdevs) < 0) - goto cleanup; + goto reattachdevs; } /* Now that all the PCI hostdevs have be dettached, we can safely @@ -139,7 +139,7 @@ int qemuPrepareHostdevPCIDevices(struct qemud_driver *driver, for (i = 0; i < pciDeviceListCount(pcidevs); i++) { pciDevice *dev = pciDeviceListGet(pcidevs, i); if (pciResetDevice(dev, driver->activePciHostdevs, pcidevs) < 0) - goto cleanup; + goto reattachdevs; } /* Now mark all the devices as active */ @@ -169,6 +169,12 @@ inactivedevs: pciDeviceListSteal(driver->activePciHostdevs, dev); } +reattachdevs: + for (i = 0; i < pciDeviceListCount(pcidevs); i++) { + pciDevice *dev = pciDeviceListGet(pcidevs, i); + pciReAttachDevice(dev, driver->activePciHostdevs); + } + cleanup: pciDeviceListFree(pcidevs); return ret; -- GitLab