[libvirt] [PATCH v2 1/4] hostdev: Streamline device ownership tracking
John Ferlan
jferlan at redhat.com
Tue Mar 22 19:03:39 UTC 2016
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);
> + }
> }
>
More information about the libvir-list
mailing list