[libvirt] [PATCH 3/6] qemu: Use qemuDomainRequiresMlock() when attaching PCI hostdev

Peter Krempa pkrempa at redhat.com
Wed Nov 18 15:27:53 UTC 2015


On Wed, Nov 18, 2015 at 15:13:17 +0100, Andrea Bolognani wrote:
> The function is used everywhere else to check whether the locked
> memory limit should be set / updated, and it should be used here
> as well.
> 
> Moreover, qemuDomainGetMlockLimitBytes() expects the hostdev to
> have already been added to the domain definition, but we only do
> that at the end of qemuDomainAttachHostPCIDevice(). Work around
> the issue by adding the hostdev before adjusting the locked memory
> limit and removing it immediately afterwards.
> ---
>  src/qemu/qemu_hotplug.c | 21 +++++++++++++++------
>  1 file changed, 15 insertions(+), 6 deletions(-)
> 
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index 89e5c0d..0bd88ce 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -1269,18 +1269,27 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver,
>                               "supported by this version of qemu"));
>              goto error;
>          }
> -
> -        /* setup memory locking limits, that are necessary for VFIO */
> -        if (virProcessSetMaxMemLock(vm->pid,
> -                                    qemuDomainGetMlockLimitBytes(vm->def)) < 0)
> -            goto error;
> -
>          break;
>  
>      default:
>          break;
>      }
>  
> +    /* Temporarily add the hostdev to the domain definition. This is needed
> +     * because qemuDomainRequiresMlock() and qemuDomainGetMlockLimitBytes()
> +     * require the hostdev to be already part of the domain definition, but
> +     * other functions like qemuAssignDeviceHostdevAlias() used below expect
> +     * it *not* to be there. A better way to handle this would be nice */
> +    vm->def->hostdevs[vm->def->nhostdevs++] = hostdev;
> +    if (qemuDomainRequiresMlock(vm->def)) {
> +        if (virProcessSetMaxMemLock(vm->pid,
> +                                    qemuDomainGetMlockLimitBytes(vm->def)) < 0) {
> +            vm->def->hostdevs[--(vm->def->nhostdevs)] = NULL;
> +            goto error;
> +        }
> +    }
> +    vm->def->hostdevs[--(vm->def->nhostdevs)] = NULL;
> +
>      if (qemuSetupHostdevCGroup(vm, hostdev) < 0)
>          goto error;
>      teardowncgroup = true;

Hmm, ugly, byt required for the PPC64 calculation in the following
patches. I guess reworking the hotplug code would be rather ugly so

relucant ACK.

Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20151118/672529f9/attachment-0001.sig>


More information about the libvir-list mailing list