1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

reattach pci devices when qemuPrepareHostdevPCIDevices() failed

Reattach all pci devices that we detached when qemuPrepareHostdevPCIDevices()
failed.
This commit is contained in:
Wen Congyang 2011-03-28 15:01:19 +08:00
parent 4e8969ebcf
commit a4efb2e335

View File

@ -127,11 +127,11 @@ int qemuPrepareHostdevPCIDevices(struct qemud_driver *driver,
for (i = 0; i < pciDeviceListCount(pcidevs); i++) { for (i = 0; i < pciDeviceListCount(pcidevs); i++) {
pciDevice *dev = pciDeviceListGet(pcidevs, i); pciDevice *dev = pciDeviceListGet(pcidevs, i);
if (!pciDeviceIsAssignable(dev, !driver->relaxedACS)) if (!pciDeviceIsAssignable(dev, !driver->relaxedACS))
goto cleanup; goto reattachdevs;
if (pciDeviceGetManaged(dev) && if (pciDeviceGetManaged(dev) &&
pciDettachDevice(dev, driver->activePciHostdevs) < 0) pciDettachDevice(dev, driver->activePciHostdevs) < 0)
goto cleanup; goto reattachdevs;
} }
/* Now that all the PCI hostdevs have be dettached, we can safely /* 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++) { for (i = 0; i < pciDeviceListCount(pcidevs); i++) {
pciDevice *dev = pciDeviceListGet(pcidevs, i); pciDevice *dev = pciDeviceListGet(pcidevs, i);
if (pciResetDevice(dev, driver->activePciHostdevs, pcidevs) < 0) if (pciResetDevice(dev, driver->activePciHostdevs, pcidevs) < 0)
goto cleanup; goto reattachdevs;
} }
/* Now mark all the devices as active */ /* Now mark all the devices as active */
@ -169,6 +169,12 @@ inactivedevs:
pciDeviceListSteal(driver->activePciHostdevs, dev); pciDeviceListSteal(driver->activePciHostdevs, dev);
} }
reattachdevs:
for (i = 0; i < pciDeviceListCount(pcidevs); i++) {
pciDevice *dev = pciDeviceListGet(pcidevs, i);
pciReAttachDevice(dev, driver->activePciHostdevs);
}
cleanup: cleanup:
pciDeviceListFree(pcidevs); pciDeviceListFree(pcidevs);
return ret; return ret;