[libvirt] [PATCH RESEND] qemu: Honor the original properties of PCI device when detaching

Osier Yang jyang at redhat.com
Thu Dec 15 02:15:09 UTC 2011


On 2011年12月15日 07:01, Eric Blake wrote:
> On 11/29/2011 03:09 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 |   17 +++++++++--------
>>   1 files changed, 9 insertions(+), 8 deletions(-)
>>
>> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
>> index 96c0070..19e4a41 100644
>> --- a/src/qemu/qemu_hotplug.c
>> +++ b/src/qemu/qemu_hotplug.c
>> @@ -1960,6 +1960,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 ||
>> @@ -2019,16 +2020,16 @@ 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 {
>
> Yay - fixing up a HACKING formatting convention violation in the process.
>
>> -        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))
>> +            qemuReattachPciDevice(activePci, driver);
>> +        else
>>               ret = -1;
>> -        pciDeviceReAttachInit(pci);
>> -        qemuReattachPciDevice(pci, driver);
>>           pciFreeDevice(pci);
>> +        pciFreeDevice(activePci);
>> +    } else {
>> +        ret = -1;
>>       }
>
> ACK, and sorry for the delayed review response.
>

Thanks, pushed.

Regards,
Osier




More information about the libvir-list mailing list