On 03/18/2016 01:03 PM, Andrea Bolognani wrote: > After this patch, ownership of virPCIDevice instances is very easy > to keep track of: for each host PCI device, the only instance that > actually matters is the one inside one of the bookkeeping list. > > Whenever some operation needs to be performed on a PCI device, the > actual device is looked up first; when this is not the case, a > comment explains the reason. > --- > src/util/virhostdev.c | 130 ++++++++++++++++++++++++++++---------------------- > 1 file changed, 72 insertions(+), 58 deletions(-) > ACK - couple of minor textual edits if you're interested below John > diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c > index 572aec0..e8efc53 100644 > --- a/src/util/virhostdev.c > +++ b/src/util/virhostdev.c [...] > inactivedevs: > - /* Only steal all the devices from activePCIHostdevs. We will > - * free them in virObjectUnref(). > - */ > + /* Move devices back to the inactive list so that they can be > + * processed properly below (reattachdevs label) */ > for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) { > virPCIDevicePtr pci = virPCIDeviceListGet(pcidevs, i); > + virPCIDevicePtr actual; > > VIR_DEBUG("Removing PCI device %s from active list", > virPCIDeviceGetName(pci)); > - virPCIDeviceListSteal(mgr->activePCIHostdevs, pci); > + if (!(actual = virPCIDeviceListSteal(mgr->activePCIHostdevs, pci))) > + continue; > + > + VIR_DEBUG("Adding PCI device %s to inactive list", > + virPCIDeviceGetName(pci)); > + if (virPCIDeviceListAdd(mgr->inactivePCIHostdevs, actual) < 0) > + VIR_WARN("Failed to add PCI device %s to the inactive list", or "Failed to return PCI device ..." > + virPCIDeviceGetName(pci)); > } > [...] > + /* Step 2: Move devices from the active list to the inactive list */ > + for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) { > + virPCIDevicePtr pci = virPCIDeviceListGet(pcidevs, i); > + virPCIDevicePtr actual; > + > VIR_DEBUG("Removing PCI device %s from active list", > virPCIDeviceGetName(pci)); > - virPCIDeviceListDel(mgr->activePCIHostdevs, pci); > - i++; > + actual = virPCIDeviceListSteal(mgr->activePCIHostdevs, pci); > + > + VIR_DEBUG("Adding PCI device %s to inactive list", ...to the inactive list > + virPCIDeviceGetName(pci)); > + if (!actual || > + virPCIDeviceListAdd(mgr->inactivePCIHostdevs, actual) < 0) { > + > + virErrorPtr err = virGetLastError(); > + VIR_ERROR(_("Failed to add PCI device %s to inactive list"), > + err ? err->message : _("unknown error")); > + virResetError(err); > + } > } > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list