提交 a12acec6 编写于 作者: D Daniel Henrique Barboza 提交者: Michal Privoznik

virhostdev: introduce virHostdevReattachAllPCIDevices

This code that executes virPCIDeviceReattach in all
virPCIDevicePtr objects of a given virPCIDeviceListPtr
list is replicated twice in the code. Putting it in a helper
function helps with readability.
Signed-off-by: NDaniel Henrique Barboza <danielhb413@gmail.com>
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
上级 6b7f87d7
...@@ -638,6 +638,37 @@ virHostdevResetAllPCIDevices(virHostdevManagerPtr mgr, ...@@ -638,6 +638,37 @@ virHostdevResetAllPCIDevices(virHostdevManagerPtr mgr,
return ret; return ret;
} }
static void
virHostdevReattachAllPCIDevices(virHostdevManagerPtr mgr,
virPCIDeviceListPtr pcidevs)
{
size_t i;
for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
virPCIDevicePtr pci = virPCIDeviceListGet(pcidevs, i);
virPCIDevicePtr actual;
/* We need to look up the actual device because that's what
* virPCIDeviceReattach() expects as its argument */
if (!(actual = virPCIDeviceListFind(mgr->inactivePCIHostdevs, pci)))
continue;
if (virPCIDeviceGetManaged(actual)) {
VIR_DEBUG("Reattaching managed PCI device %s",
virPCIDeviceGetName(pci));
if (virPCIDeviceReattach(actual,
mgr->activePCIHostdevs,
mgr->inactivePCIHostdevs) < 0) {
VIR_ERROR(_("Failed to re-attach PCI device: %s"),
virGetLastErrorMessage());
}
} else {
VIR_DEBUG("Not reattaching unmanaged PCI device %s",
virPCIDeviceGetName(actual));
}
}
}
int int
virHostdevPreparePCIDevices(virHostdevManagerPtr mgr, virHostdevPreparePCIDevices(virHostdevManagerPtr mgr,
const char *drv_name, const char *drv_name,
...@@ -898,26 +929,7 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr mgr, ...@@ -898,26 +929,7 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr mgr,
} }
reattachdevs: reattachdevs:
for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) { virHostdevReattachAllPCIDevices(mgr, pcidevs);
virPCIDevicePtr pci = virPCIDeviceListGet(pcidevs, i);
virPCIDevicePtr actual;
/* We need to look up the actual device because that's what
* virPCIDeviceReattach() expects as its argument */
if (!(actual = virPCIDeviceListFind(mgr->inactivePCIHostdevs, pci)))
continue;
if (virPCIDeviceGetManaged(actual)) {
VIR_DEBUG("Reattaching managed PCI device %s",
virPCIDeviceGetName(pci));
ignore_value(virPCIDeviceReattach(actual,
mgr->activePCIHostdevs,
mgr->inactivePCIHostdevs));
} else {
VIR_DEBUG("Not reattaching unmanaged PCI device %s",
virPCIDeviceGetName(pci));
}
}
cleanup: cleanup:
virObjectUnlock(mgr->activePCIHostdevs); virObjectUnlock(mgr->activePCIHostdevs);
...@@ -1039,28 +1051,7 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr mgr, ...@@ -1039,28 +1051,7 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr mgr,
/* Step 5: Reattach managed devices to their host drivers; unmanaged /* Step 5: Reattach managed devices to their host drivers; unmanaged
* devices don't need to be processed further */ * devices don't need to be processed further */
for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) { virHostdevReattachAllPCIDevices(mgr, pcidevs);
virPCIDevicePtr pci = virPCIDeviceListGet(pcidevs, i);
virPCIDevicePtr actual;
/* We need to look up the actual device because that's what
* virPCIDeviceReattach() expects as its argument */
if (!(actual = virPCIDeviceListFind(mgr->inactivePCIHostdevs, pci)))
continue;
if (virPCIDeviceGetManaged(actual)) {
if (virPCIDeviceReattach(actual,
mgr->activePCIHostdevs,
mgr->inactivePCIHostdevs) < 0) {
VIR_ERROR(_("Failed to re-attach PCI device: %s"),
virGetLastErrorMessage());
virResetLastError();
}
}
else
VIR_DEBUG("Not reattaching unmanaged PCI device %s",
virPCIDeviceGetName(actual));
}
virObjectUnlock(mgr->activePCIHostdevs); virObjectUnlock(mgr->activePCIHostdevs);
virObjectUnlock(mgr->inactivePCIHostdevs); virObjectUnlock(mgr->inactivePCIHostdevs);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册