mirror of https://gitee.com/openkylin/libvirt.git
hostdev: Mark PCI devices as inactive as they're detached
We want to eventually factor out the code dealing with device detaching and reattaching, so that we can share it and make sure it's called eg. when 'virsh nodedev-detach' is used. For that to happen, it's important that the lists of active and inactive PCI devices are updated every time a device changes its state. Instead of passing NULL as the last argument of virPCIDeviceDetach() and virPCIDeviceReattach(), pass the proper list so that it can be updated.
This commit is contained in:
parent
6d9cdd2a57
commit
b8a625f384
|
@ -595,11 +595,17 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
|
|||
/* Loop 2: detach managed devices (i.e. bind to appropriate stub driver) */
|
||||
for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
|
||||
virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
|
||||
|
||||
if (virPCIDeviceGetManaged(dev) &&
|
||||
virPCIDeviceDetach(dev, hostdev_mgr->activePCIHostdevs, NULL) < 0)
|
||||
goto reattachdevs;
|
||||
virPCIDeviceDetach(dev,
|
||||
hostdev_mgr->activePCIHostdevs,
|
||||
hostdev_mgr->inactivePCIHostdevs) < 0)
|
||||
goto reattachdevs;
|
||||
}
|
||||
|
||||
/* At this point, all devices are attached to the stub driver and have
|
||||
* been marked as inactive */
|
||||
|
||||
/* Loop 3: Now that all the PCI hostdevs have been detached, we
|
||||
* can safely reset them */
|
||||
for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
|
||||
|
@ -708,8 +714,9 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr hostdev_mgr,
|
|||
/* NB: This doesn't actually re-bind to original driver, just
|
||||
* unbinds from the stub driver
|
||||
*/
|
||||
ignore_value(virPCIDeviceReattach(dev, hostdev_mgr->activePCIHostdevs,
|
||||
NULL));
|
||||
ignore_value(virPCIDeviceReattach(dev,
|
||||
hostdev_mgr->activePCIHostdevs,
|
||||
hostdev_mgr->inactivePCIHostdevs));
|
||||
}
|
||||
|
||||
cleanup:
|
||||
|
|
Loading…
Reference in New Issue