[libvirt] [PATCH v2 7/9] hostdev: Update comments
John Ferlan
jferlan at redhat.com
Tue Jan 26 23:59:11 UTC 2016
On 01/25/2016 11:21 AM, Andrea Bolognani wrote:
> Some of the comments are no longer accurate after the recent changes,
> others have been expanded and hopefully improved.
>
> The initial summary of the operations has been removed so that two
> separate edits are not needed when making changes.
> ---
> src/util/virhostdev.c | 68 +++++++++++++++++++++++----------------------------
> 1 file changed, 30 insertions(+), 38 deletions(-)
>
6 of one, half dozen of another, but I think these should have been done
at the time of change... I'll make specific comments about changes here
still though...
> diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
> index ab17547..0892dbf 100644
> --- a/src/util/virhostdev.c
> +++ b/src/util/virhostdev.c
This comment block starts "We have to use 9 loops here." - that should
be adjusted too as there are now 7 steps. (Is it any coincidence that
there are also 7 stages of grief and 7 steps to great health? ;-))
> @@ -675,11 +675,10 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> * must be reset before being marked as active.
> */
>
> - /* Loop 1: validate that non-managed device isn't in use, eg
> - * by checking that device is either un-bound, or bound
> - * to pci-stub.ko
> - */
> + /* Detaching devices from the host involves several steps; each of them
> + * is described at length below */
>
> + /* Step 1: perform safety checks, eg. ensure the devices are assignable */
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
> bool strict_acs_check = !!(flags & VIR_HOSTDEV_STRICT_ACS_CHECK);
> @@ -710,7 +709,8 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> }
> }
>
> - /* Loop 2: detach managed devices (i.e. bind to appropriate stub driver) */
> + /* Step 2: detach managed devices (i.e. bind to appropriate stub driver).
> + * detachPCIDevices() will also mark devices as inactive */
s/detachPCIDevices/virHostdevOnlyDetachPCIDevice
Or whatever it ends up being named.
s/will also mark devices as inactive/will place device on inactive list */
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
>
> @@ -718,11 +718,10 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> goto reattachdevs;
> }
>
> - /* At this point, all devices are attached to the stub driver and have
> + /* At this point, devices are attached to the stub driver and have
> * been marked as inactive */
>
> - /* Loop 3: Now that all the PCI hostdevs have been detached, we
> - * can safely reset them */
> + /* Step 3: perform a PCI reset on all devices */
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
>
> @@ -732,8 +731,7 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> goto reattachdevs;
> }
>
> - /* Loop 4: For SRIOV network devices, Now that we have detached the
> - * the network device, set the netdev config */
> + /* Step 4: set the netdev config for SRIOV network devices */
> for (i = 0; i < nhostdevs; i++) {
> virDomainHostdevDefPtr hostdev = hostdevs[i];
> if (!virHostdevIsPCINetDevice(hostdev))
> @@ -762,9 +760,7 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> goto inactivedevs;
> }
>
Made my Step 5 comment earlier
> - /* Loop 7: Now set the used_by_domain of the device in
> - * activePCIHostdevs as domain name.
> - */
> + /* Step 6: set driver and domain information */
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev, activeDev;
>
> @@ -777,7 +773,7 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> virPCIDeviceSetUsedBy(activeDev, drv_name, dom_name);
> }
>
> - /* Loop 8: Now set the original states for hostdev def */
> + /* Step 7: set the original states for hostdev def */
> for (i = 0; i < nhostdevs; i++) {
> virPCIDevicePtr dev;
> virPCIDevicePtr pcidev;
> @@ -792,10 +788,9 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> dev = virPCIDeviceNew(pcisrc->addr.domain, pcisrc->addr.bus,
> pcisrc->addr.slot, pcisrc->addr.function);
>
> - /* original states "unbind_from_stub", "remove_slot",
> - * "reprobe" were already set by pciDettachDevice in
> - * loop 2.
> - */
> + /* original states for "unbind_from_stub", "remove_slot" and
> + * "reprobe" (used when reattaching) were already set by
> + * detachPCIDevices() in a previous step */
> VIR_DEBUG("Saving network configuration of PCI device %s",
> virPCIDeviceGetName(dev));
> if ((pcidev = virPCIDeviceListFind(pcidevs, dev))) {
> @@ -875,16 +870,11 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr hostdev_mgr,
> goto cleanup;
> }
>
> - /* Loop through the assigned devices 4 times: 1) delete them all from
> - * activePCIHostdevs, 2) restore network config of SRIOV netdevs, 3) Do a
> - * PCI reset on each device, 4) reattach the devices to their host drivers
> - * (managed) or add them to inactivePCIHostdevs (!managed).
> - */
> + /* Reattaching devices to the host involves several steps; each of them
> + * is described at length below */
>
> - /*
> - * Loop 1: verify that each device in the hostdevs list really was in use
> - * by this domain, and remove them all from the activePCIHostdevs list.
> - */
> + /* Step 1: verify that each device in the hostdevs list really was in use
> + * by this domain */
> i = 0;
> while (i < virPCIDeviceListCount(pcidevs)) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
> @@ -922,14 +912,11 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr hostdev_mgr,
> goto cleanup;
> }
>
> - /* At this point, any device that had been used by the guest is in
> - * pcidevs, but has been removed from activePCIHostdevs.
> - */
> + /* At this point, devices are no longer marked as active and have been
> + * marked as inactive instead */
>
> - /*
> - * Loop 2: restore original network config of hostdevs that used
> - * <interface type='hostdev'>
> - */
> + /* Step 3: restore original network config of hostdevs that used
> + * <interface type='hostdev'> */
> for (i = 0; i < nhostdevs; i++) {
> virDomainHostdevDefPtr hostdev = hostdevs[i];
>
> @@ -950,7 +937,7 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr hostdev_mgr,
> }
> }
>
> - /* Loop 3: perform a PCI Reset on all devices */
> + /* Step 4: perform a PCI Reset on all devices */
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
>
> @@ -964,15 +951,20 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr hostdev_mgr,
> }
> }
>
> - /* Loop 4: reattach devices to their host drivers (if managed) or place
> - * them on the inactive list (if not managed)
> - */
> + /* Step 5: reattach managed devices to their host drivers; unmanaged
> + * devices need no further processing. reattachPCIDevices() will
s/reattachPCIDevices/virHostdevOnlyReattachPCIDevice
(or whatever the final name is)
> + * remove devices from the inactive list as they are reattached
> + * to the host */
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
>
> ignore_value(virHostdevOnlyReattachPCIDevice(hostdev_mgr, dev, true));
> }
>
> + /* At this point, all devices are either marked as inactive (if they
> + * were unmanaged), or have been reattached to the host driver (if they
> + * were managed) and are no longer tracked by any of our device lists */
> +
Ahh, but if you kept the goto cleanup code during what is step 2 here,
then this wouldn't be necessarily true...
Although I personally think your new Step 2 is just part of Step 1.
John
> cleanup:
> virObjectUnref(pcidevs);
> virObjectUnlock(hostdev_mgr->activePCIHostdevs);
>
More information about the libvir-list
mailing list