On 07/02/2011 06:10 PM, Wen Congyang wrote:
> At 2011-7-2 13:27, Guannan Ren write:
>> On 07/01/2011 11:30 PM, ghostwcy wrote:
>>> At 2011-7-1 18:24, Guannan Ren write:
>>>> the "virsh nodedev-reattch" command could return successfully,
but
>>>> the pci device is still
>>>> bound to pci-stub driver. The reason is noddev-reattach trys to use
>>>> the variables set by
>>>> nodedev-dettach commands. Becuase these variables is not persistent,
>>>> this is not we expected.
>>>> the patch try to fix it.
>>>
>>> I do not agree with this patch. You should read this mail:
>>>
https://www.redhat.com/archives/libvir-list/2011-April/msg00315.html
>>>
>>> This patch will cause regression about hotpluging host pci device.
>>>
>>> I think the problem is that: the init value of these variables is
>>> wrong.
>>> We can fix this bug by modifing pciGetDevice() or its caller.
>>>
>>>>
>>
>> I read the patch, it introduced the mechanism to check whether the
>> device is bound to
>> pci-stub when we write dev-id to new_id if a new device with this ID is
>> hotpluggged, or if
>> a probe is triggered for such a device, I think my patch kept it
>> working.
>
> I think my explanation is not detailed. For example:
>
> The user runs 'virsh attach-device' to pass through host pci device
> to guest
> os. We will call the function qemuPrepareHostdevPCIDevices() to bind
> the pci
> device to pci-stub, and reset it. If the pci device does not support
> reset function,
> we will call pciReAttachDevice() to rollback the things we have done.
>
> If the device is alread bound to pci-stub before the user runs 'virsh
> attach-device',
> we should do nothing. If the device is not bound to any driver, we
> should
> unbound it from pci-stub. If the device is bound to other driver, we
> should
> unbound it from pci-stub, and reprobe it.
>
> When we call pciReAttachDevice(), the device is bound to pci-stub,
> but we do
> the different thing, because the origin state of the pci device is
> different.
> So I add these three variables to remember what we do in
> pciDettachDevice().
>
Yep, the state of the pci device is different possibly or
probably, I made the determination
in pciUnbindDeviceFromStub() by examining the name and
existence of pci device driver.
>
>> The overall idea is as follows:
>> If the device is already bound to pci-stub, then do nothing.
>> If not, try to write dev-id to "new_id", then check the state of its
>> driver(hotplug issue)
>> Unbind from its original driver , then bind to pci-stub driver
>> Anyway, we should write dev-id to "remove_id" to protect the device
>> from
>> causing
>> problems when reattaching it.
>> About fixing the problem from pciGetDevice(), unless we feedback the
>> state of pci device to
>> libvirtd but I don't think it is easier.
>
> We already have pciDeviceSetManaged() and pciDeviceGetManaged().
> I think we should add some similar APIs in util/pci.c to modify and read
> these three variables.
The "managed" is from the xml file to "virsh attach-device"
executed each time,
but the values of these three variables are generated in
running time , it is hard
to keep them to the next command.
>
> And we call these new APIs in qemudNodeDeviceDettach() to set these
> three
> variables to correct value(I think these three variables should be 1).
sorry I missed above words, I will try to add a function to
set these three values to 1 by default.
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list