[libvirt] [PATCH 6/6] hostdev: Emit debug messages while handling PCI hostdevs
Laine Stump
laine at laine.org
Fri Dec 18 16:17:01 UTC 2015
On 12/17/2015 10:24 AM, Andrea Bolognani wrote:
> Both detach and reattach are complex operations involving several steps,
> and it can be useful to be able to follow along by reading the log.
> ---
ACK. Unfortunately it will all just get buried in the inane miles-long
logs of converting PCI address strings into integers step by step.
(there are some things that really should only be logged in a
"super-debug-dev" mode. We don't need to fill up GB and GB (oh, sorry -
GiB and GiB :-P) of space all over the world with debug logs that simply
verify that our LongToStr function is still working. But that's not your
problem...)
> src/util/virhostdev.c | 45 +++++++++++++++++++++++++++++++++++++++------
> 1 file changed, 39 insertions(+), 6 deletions(-)
>
> diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
> index c8da8e5..f31ad41 100644
> --- a/src/util/virhostdev.c
> +++ b/src/util/virhostdev.c
> @@ -596,11 +596,17 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
>
> - if (virPCIDeviceGetManaged(dev) &&
> - virPCIDeviceDetach(dev,
> - hostdev_mgr->activePCIHostdevs,
> - hostdev_mgr->inactivePCIHostdevs) < 0)
> + if (virPCIDeviceGetManaged(dev)) {
> + VIR_DEBUG("Detaching managed PCI device %s",
> + virPCIDeviceGetName(dev));
> + if (virPCIDeviceDetach(dev,
> + hostdev_mgr->activePCIHostdevs,
> + hostdev_mgr->inactivePCIHostdevs) < 0)
> goto reattachdevs;
> + } else {
> + VIR_DEBUG("Not detaching unmanaged PCI device %s",
> + virPCIDeviceGetName(dev));
> + }
> }
>
> /* At this point, all devices are attached to the stub driver and have
> @@ -611,6 +617,7 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
>
> + VIR_DEBUG("Resetting PCI device %s", virPCIDeviceGetName(dev));
> if (virPCIDeviceReset(dev, hostdev_mgr->activePCIHostdevs,
> hostdev_mgr->inactivePCIHostdevs) < 0)
> goto reattachdevs;
> @@ -632,14 +639,20 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> /* Loop 5: Now mark all the devices as active */
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
> +
> + VIR_DEBUG("Adding PCI device %s to active list",
> + virPCIDeviceGetName(dev));
> if (virPCIDeviceListAdd(hostdev_mgr->activePCIHostdevs, dev) < 0)
> goto inactivedevs;
> }
>
> /* Loop 6: Now remove the devices from inactive list. */
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> - virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
> - virPCIDeviceListDel(hostdev_mgr->inactivePCIHostdevs, dev);
> + virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
> +
> + VIR_DEBUG("Removing PCI device %s from inactive list",
> + virPCIDeviceGetName(dev));
> + virPCIDeviceListDel(hostdev_mgr->inactivePCIHostdevs, dev);
> }
>
> /* Loop 7: Now set the used_by_domain of the device in
> @@ -651,6 +664,8 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> dev = virPCIDeviceListGet(pcidevs, i);
> activeDev = virPCIDeviceListFind(hostdev_mgr->activePCIHostdevs, dev);
>
> + VIR_DEBUG("Setting driver and domain information for PCI device %s",
> + virPCIDeviceGetName(dev));
> if (activeDev)
> virPCIDeviceSetUsedBy(activeDev, drv_name, dom_name);
> }
> @@ -674,6 +689,8 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> * "reprobe" were already set by pciDettachDevice in
> * loop 2.
> */
> + VIR_DEBUG("Saving network configuration of PCI device %s",
> + virPCIDeviceGetName(dev));
> if ((pcidev = virPCIDeviceListFind(pcidevs, dev))) {
> hostdev->origstates.states.pci.unbind_from_stub =
> virPCIDeviceGetUnbindFromStub(pcidev);
> @@ -699,6 +716,9 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> */
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
> +
> + VIR_DEBUG("Removing PCI device %s from active list",
> + virPCIDeviceGetName(dev));
> virPCIDeviceListSteal(hostdev_mgr->activePCIHostdevs, dev);
> }
>
> @@ -715,9 +735,14 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
> /* NB: This doesn't actually re-bind to original driver, just
> * unbinds from the stub driver
> */
> + VIR_DEBUG("Reattaching managed PCI device %s",
> + virPCIDeviceGetName(dev));
> ignore_value(virPCIDeviceReattach(dev,
> hostdev_mgr->activePCIHostdevs,
> hostdev_mgr->inactivePCIHostdevs));
> + } else {
> + VIR_DEBUG("Not reattaching unmanaged PCI device %s",
> + virPCIDeviceGetName(dev));
> }
> }
>
> @@ -739,6 +764,8 @@ virHostdevReattachPCIDevice(virPCIDevicePtr dev, virHostdevManagerPtr mgr)
> * successfully, it must have been inactive.
> */
> if (!virPCIDeviceGetManaged(dev)) {
> + VIR_DEBUG("Adding unmanaged PCI device %s to inactive list",
> + virPCIDeviceGetName(dev));
> if (virPCIDeviceListAdd(mgr->inactivePCIHostdevs, dev) < 0)
> virPCIDeviceFree(dev);
> return;
> @@ -754,6 +781,7 @@ virHostdevReattachPCIDevice(virPCIDevicePtr dev, virHostdevManagerPtr mgr)
> }
> }
>
> + VIR_DEBUG("Reattaching PCI device %s", virPCIDeviceGetName(dev));
> if (virPCIDeviceReattach(dev, mgr->activePCIHostdevs,
> mgr->inactivePCIHostdevs) < 0) {
> virErrorPtr err = virGetLastError();
> @@ -821,6 +849,8 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr hostdev_mgr,
> }
> }
>
> + VIR_DEBUG("Removing PCI device %s from active list",
> + virPCIDeviceGetName(dev));
> virPCIDeviceListDel(hostdev_mgr->activePCIHostdevs, dev);
> i++;
> }
> @@ -843,6 +873,8 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr hostdev_mgr,
> pcisrc->addr.slot, pcisrc->addr.function);
> if (dev) {
> if (virPCIDeviceListFind(pcidevs, dev)) {
> + VIR_DEBUG("Restoring network configuration of PCI device %s",
> + virPCIDeviceGetName(dev));
> virHostdevNetConfigRestore(hostdev, hostdev_mgr->stateDir,
> oldStateDir);
> }
> @@ -855,6 +887,7 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr hostdev_mgr,
> for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
> virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
>
> + VIR_DEBUG("Resetting PCI device %s", virPCIDeviceGetName(dev));
> if (virPCIDeviceReset(dev, hostdev_mgr->activePCIHostdevs,
> hostdev_mgr->inactivePCIHostdevs) < 0) {
> virErrorPtr err = virGetLastError();
More information about the libvir-list
mailing list