mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
virhostdev: introduce virHostdevResetAllPCIDevices
This code that executes virPCIDeviceReset 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: Daniel Henrique Barboza <danielhb413@gmail.com> Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
d19c21429f
commit
7929a48b43
@ -613,6 +613,31 @@ virHostdevRestoreNetConfig(virDomainHostdevDefPtr hostdev,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
virHostdevResetAllPCIDevices(virHostdevManagerPtr mgr,
|
||||||
|
virPCIDeviceListPtr pcidevs)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
|
||||||
|
virPCIDevicePtr pci = virPCIDeviceListGet(pcidevs, i);
|
||||||
|
|
||||||
|
/* We can avoid looking up the actual device here, because performing
|
||||||
|
* a PCI reset on a device doesn't require any information other than
|
||||||
|
* the address, which 'pci' already contains */
|
||||||
|
VIR_DEBUG("Resetting PCI device %s", virPCIDeviceGetName(pci));
|
||||||
|
if (virPCIDeviceReset(pci, mgr->activePCIHostdevs,
|
||||||
|
mgr->inactivePCIHostdevs) < 0) {
|
||||||
|
VIR_ERROR(_("Failed to reset PCI device: %s"),
|
||||||
|
virGetLastErrorMessage());
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
virHostdevPreparePCIDevices(virHostdevManagerPtr mgr,
|
virHostdevPreparePCIDevices(virHostdevManagerPtr mgr,
|
||||||
const char *drv_name,
|
const char *drv_name,
|
||||||
@ -765,17 +790,8 @@ virHostdevPreparePCIDevices(virHostdevManagerPtr mgr,
|
|||||||
|
|
||||||
/* Step 3: Now that all the PCI hostdevs have been detached, we
|
/* Step 3: Now that all the PCI hostdevs have been detached, we
|
||||||
* can safely reset them */
|
* can safely reset them */
|
||||||
for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
|
if (virHostdevResetAllPCIDevices(mgr, pcidevs) < 0)
|
||||||
virPCIDevicePtr pci = virPCIDeviceListGet(pcidevs, i);
|
|
||||||
|
|
||||||
/* We can avoid looking up the actual device here, because performing
|
|
||||||
* a PCI reset on a device doesn't require any information other than
|
|
||||||
* the address, which 'pci' already contains */
|
|
||||||
VIR_DEBUG("Resetting PCI device %s", virPCIDeviceGetName(pci));
|
|
||||||
if (virPCIDeviceReset(pci, mgr->activePCIHostdevs,
|
|
||||||
mgr->inactivePCIHostdevs) < 0)
|
|
||||||
goto reattachdevs;
|
goto reattachdevs;
|
||||||
}
|
|
||||||
|
|
||||||
/* Step 4: For SRIOV network devices, Now that we have detached the
|
/* Step 4: For SRIOV network devices, Now that we have detached the
|
||||||
* the network device, set the new netdev config */
|
* the network device, set the new netdev config */
|
||||||
@ -1046,20 +1062,7 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr mgr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Step 4: perform a PCI Reset on all devices */
|
/* Step 4: perform a PCI Reset on all devices */
|
||||||
for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
|
virHostdevResetAllPCIDevices(mgr, pcidevs);
|
||||||
virPCIDevicePtr pci = virPCIDeviceListGet(pcidevs, i);
|
|
||||||
|
|
||||||
/* We can avoid looking up the actual device here, because performing
|
|
||||||
* a PCI reset on a device doesn't require any information other than
|
|
||||||
* the address, which 'pci' already contains */
|
|
||||||
VIR_DEBUG("Resetting PCI device %s", virPCIDeviceGetName(pci));
|
|
||||||
if (virPCIDeviceReset(pci, mgr->activePCIHostdevs,
|
|
||||||
mgr->inactivePCIHostdevs) < 0) {
|
|
||||||
VIR_ERROR(_("Failed to reset PCI device: %s"),
|
|
||||||
virGetLastErrorMessage());
|
|
||||||
virResetLastError();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user