[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