Daniel P. Berrange wrote:
The PCI passthrough patches made it so that qemudBuildCommandLine()
would
actually try to detach your host devices & reset them. Most definitely not
what you want when running this via a test case!
This patch moves the host device management out into a separate method,
so that qemudBuildCommandLine() doesn't do anything except safely build
the command line.
Ah. This fixes the failure I just reported.
Looks good.
+ /* Now that all the PCI hostdevs have be dettached, we can
safely
Obviously this is just "moved" code, but might as well fix the comment:
s/be/been/
+ * reset them */
+ for (i = 0 ; i < def->nhostdevs ; i++) {
+ virDomainHostdevDefPtr hostdev = def->hostdevs[i];
+ pciDevice *dev;
+
+ if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
+ continue;
+ if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
+ continue;
+
+ dev = pciGetDevice(conn,
+ hostdev->source.subsys.u.pci.domain,
+ hostdev->source.subsys.u.pci.bus,
+ hostdev->source.subsys.u.pci.slot,
+ hostdev->source.subsys.u.pci.function);
+ if (!dev)
+ goto error;
+
+ if (pciResetDevice(conn, dev) < 0) {
+ pciFreeDevice(conn, dev);
+ goto error;
+ }
+
+ pciFreeDevice(conn, dev);
You can remove a duplicate free and save two lines
by replacing the above with this:
int err = pciResetDevice(conn, dev);
pciFreeDevice(conn, dev);
if (err < 0)
goto error;
+ }
+
+ return 0;
+
+error:
+ return -1;
+}