[libvirt] [PATCH] Revert "hostdev: Use actual device when reattaching"
Laine Stump
laine at laine.org
Fri Apr 1 14:59:02 UTC 2016
On 04/01/2016 09:38 AM, Andrea Bolognani wrote:
> This reverts commit ee4cfb56436b50345b072c706b87aff82e06d760.
>
> Since we're still not persisting our bookkeeping lists across
> daemon restarts, we might have lost some information
> virPCIDeviceReattach() relies on, for example whether the
> device needs to be unbound from the stub driver.
>
> As a result, if the daemon has been restarted in the meantime,
> the device might end up remaining bound to the stub driver even
> after 'virsh nodedev-reattach' or similar has been called, with
> no way of giving it back to the host short of messing with
> sysfs behind libvirt's back.
>
> Revert back to the previous behavior of always trying to bind
> the device to the host driver, regardless of its status when it
> was detached, until persistent bookkeeping lists have been
> implemented.
> ---
> src/util/virhostdev.c | 10 ++++------
> 1 file changed, 4 insertions(+), 6 deletions(-)
I haven't been able to test yet if this has any effect on the problem I
encountered, but it definitely does fix a known regression that we
should get in before the release - ACK.
>
> diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
> index b397b79..933c942 100644
> --- a/src/util/virhostdev.c
> +++ b/src/util/virhostdev.c
> @@ -1658,7 +1658,6 @@ virHostdevPCINodeDeviceReAttach(virHostdevManagerPtr mgr,
> virPCIDevicePtr pci)
> {
> struct virHostdevIsPCINodeDeviceUsedData data = { mgr, NULL, false };
> - virPCIDevicePtr actual;
> int ret = -1;
>
> virObjectLock(mgr->activePCIHostdevs);
> @@ -1667,12 +1666,11 @@ virHostdevPCINodeDeviceReAttach(virHostdevManagerPtr mgr,
> if (virHostdevIsPCINodeDeviceUsed(virPCIDeviceGetAddress(pci), &data))
> goto cleanup;
>
> - /* We need to look up the actual device because that's what
> - * virPCIDeviceReattach() expects as its argument */
> - if (!(actual = virPCIDeviceListFind(mgr->inactivePCIHostdevs, pci)))
> - goto cleanup;
> + virPCIDeviceSetUnbindFromStub(pci, true);
> + virPCIDeviceSetRemoveSlot(pci, true);
> + virPCIDeviceSetReprobe(pci, true);
>
> - if (virPCIDeviceReattach(actual, mgr->activePCIHostdevs,
> + if (virPCIDeviceReattach(pci, mgr->activePCIHostdevs,
> mgr->inactivePCIHostdevs) < 0)
> goto cleanup;
>
More information about the libvir-list
mailing list