[libvirt] [PATCH v3] qemu: Honor the orginal PCI dev properties when reattaching

Eric Blake eblake at redhat.com
Fri Oct 14 21:47:11 UTC 2011


On 10/13/2011 02:30 AM, Osier Yang wrote:
> BZ# https://bugzilla.redhat.com/show_bug.cgi?id=736214
>
> The problem is caused by the original info of domain's PCI dev is
> maintained by qemu_driver->activePciHostdevs list, (E.g. dev->reprobe,
> which stands for whether need to reprobe driver for the dev when do
> reattachment). The fields (dev->reprobe, dev->unbind_from_stub, and
> dev->remove_slot) are initialized properly when preparing the PCI
> device for managed attachment. However, when do reattachment, it
> construct a complete new "pciDevice" without honoring the original
> dev info, and thus the dev won't get the original driver or can get
> other problem.
>
> This patch is to fix the problem by get the devs from list
> driver->activePciHostdevs.
>
> Tested with following 3 scenarios:
>    * the PCI was bound to some driver not pci-stub before attaching
>
>      result: the device will be bound to the original driver
>
>    * the PCI was bound to pci-stub before attaching
>
>      result: no driver reprobing, and still bound to pci-stub
>
>    * The PCI was not bound to any driver
>
>      result: no driver reproing, and still not bound to any driver.

s/reproing/reprobing/


I like v3 better, even though it has the longer diffstat, because it 
divides the work into smaller self-contained functions rather than 
making an already long function longer.

However, I got a merge conflict when applying on top of your other pci 
hostdev fixup patch; but I think I resolved that correctly.

ACK and pushed, after I reproduced the issue and tested that the patch 
fixes it.

It didn't help matters that virt-manager has a bug.  It manually calls 
the equivalent of 'nodedev-detach' prior to hot-plugging any hostdev 
device, _even though it requests managed=1_.  That means the device is 
already bound to pci-stub before the hotplug attempt is started; and on 
failure to hotplug, libvirt _faithfully_ restores the the device back to 
its original state (still pci-stub), but virt-manager does not recognize 
the error condition and does not call nodedev-reattach.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list