On 01/22/2010 04:24 AM, Daniel Veillard wrote: >> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms >> index c912d81..e42c090 100644 >> --- a/src/libvirt_private.syms >> +++ b/src/libvirt_private.syms ... >> @@ -2277,12 +2278,18 @@ qemuDomainReAttachHostDevices(virConnectPtr conn, >> >> for (i = 0; i < pciDeviceListCount(pcidevs); i++) { >> pciDevice *dev = pciDeviceListGet(pcidevs, i); >> - if (pciDeviceGetManaged(dev) && >> - pciReAttachDevice(NULL, dev) < 0) { >> - virErrorPtr err = virGetLastError(); >> - VIR_ERROR(_("Failed to re-attach PCI device: %s"), >> - err ? err->message : ""); >> - virResetError(err); >> + if (pciDeviceGetManaged(dev)) { >> + while (pciWaitForDeviceCleanup(dev, "kvm_assigned_device") >> + && retries) { >> + usleep(100*1000); >> + retries--; >> + } >> + if (pciReAttachDevice(NULL, dev) < 0) { >> + virErrorPtr err = virGetLastError(); >> + VIR_ERROR(_("Failed to re-attach PCI device: %s"), >> + err ? err->message : ""); >> + virResetError(err); >> + } >> } >> } > > Okay so the maximum retries number for the whole set of managed > devices is 100, not 100 per device (as retries is not incremented in the > pci device loop) so the longuest we may wait is 10ms as a result > whatever the number of devices, that's the intent, right ? Actually, no, I meant to wait per-device; thanks for point out the bug. Incidentally, the timeout is 10 seconds, not ms. Updated patch with per-device retries coming up. -- Chris Lalancette -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list