[libvirt] [PATCH] qemu: Honor the original properties of PCI device when detaching
Eric Blake
eblake at redhat.com
Mon Oct 17 18:23:39 UTC 2011
On 10/17/2011 05:07 AM, Osier Yang wrote:
> This patch fixes two problems:
> 1) The device will be reattached to host even if it's not
> managed, as there is a "pciDeviceSetManaged".
> 2) The device won't be reattached to host with original
> driver properly. As it doesn't honor the device original
> properties which are maintained by driver->activePciHostdevs.
> ---
> src/qemu/qemu_hotplug.c | 16 ++++++++--------
> 1 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index bfa524b..f3f0060 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -1956,6 +1956,7 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver,
> qemuDomainObjPrivatePtr priv = vm->privateData;
> int i, ret;
> pciDevice *pci;
> + pciDevice *activePci;
>
> for (i = 0 ; i< vm->def->nhostdevs ; i++) {
> if (vm->def->hostdevs[i]->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
> @@ -2015,16 +2016,15 @@ int qemuDomainDetachHostPciDevice(struct qemud_driver *driver,
> detach->source.subsys.u.pci.bus,
> detach->source.subsys.u.pci.slot,
> detach->source.subsys.u.pci.function);
> - if (!pci)
> - ret = -1;
> - else {
> - pciDeviceSetManaged(pci, detach->managed);
> - pciDeviceListDel(driver->activePciHostdevs, pci);
> - if (pciResetDevice(pci, driver->activePciHostdevs, NULL)< 0)
> + if (pci) {
> + activePci = pciDeviceListSteal(driver->activePciHostdevs, pci);
> + if (pciResetDevice(activePci, driver->activePciHostdevs, NULL)< 0)
> ret = -1;
> - pciDeviceReAttachInit(pci);
> - qemuReattachPciDevice(pci, driver);
> + qemuReattachPciDevice(activePci, driver);
This calls qemuReattachPciDevice even if pciResetDevice failed. I don't
think that is right.
However, I agree with you that hot-unplug cannot make a device managed
if it was not already managed, and also that it should be using the
device attributes from driver->activePciHostdevs rather than from the
just-created pci in order to properly decide how much work to do on the
unplug event.
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list