mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
remove devices from driver->activePciHostdevs when qemuPrepareHostdevPCIDevices() failed
We should not mark pci devices as active when qemuPrepareHostdevPCIDevices() failed.
This commit is contained in:
parent
d5981f1caf
commit
115498597a
@ -112,7 +112,7 @@ int qemuPrepareHostdevPCIDevices(struct qemud_driver *driver,
|
||||
if (!(pcidevs = qemuGetPciHostDeviceList(hostdevs, nhostdevs)))
|
||||
return -1;
|
||||
|
||||
/* We have to use 3 loops here. *All* devices must
|
||||
/* We have to use 4 loops here. *All* devices must
|
||||
* be detached before we reset any of them, because
|
||||
* in some cases you have to reset the whole PCI,
|
||||
* which impacts all devices on it. Also, all devices
|
||||
@ -145,14 +145,29 @@ int qemuPrepareHostdevPCIDevices(struct qemud_driver *driver,
|
||||
/* Now mark all the devices as active */
|
||||
for (i = 0; i < pciDeviceListCount(pcidevs); i++) {
|
||||
pciDevice *dev = pciDeviceListGet(pcidevs, i);
|
||||
pciDeviceListSteal(pcidevs, dev);
|
||||
if (pciDeviceListAdd(driver->activePciHostdevs, dev) < 0) {
|
||||
pciFreeDevice(dev);
|
||||
goto cleanup;
|
||||
goto inactivedevs;
|
||||
}
|
||||
}
|
||||
|
||||
/* Now steal all the devices from pcidevs */
|
||||
for (i = 0; i < pciDeviceListCount(pcidevs); i++) {
|
||||
pciDevice *dev = pciDeviceListGet(pcidevs, i);
|
||||
pciDeviceListSteal(pcidevs, dev);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
goto cleanup;
|
||||
|
||||
inactivedevs:
|
||||
/* Only steal all the devices from driver->activePciHostdevs. We will
|
||||
* free them in pciDeviceListFree().
|
||||
*/
|
||||
for (i = 0; i < pciDeviceListCount(pcidevs); i++) {
|
||||
pciDevice *dev = pciDeviceListGet(pcidevs, i);
|
||||
pciDeviceListSteal(driver->activePciHostdevs, dev);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
pciDeviceListFree(pcidevs);
|
||||
|
Loading…
x
Reference in New Issue
Block a user