[libvirt] [PATCH v2 3/5] qemu: qemuDomainHotplugVcpus - separate out the add cgroup

Ján Tomko jtomko at redhat.com
Wed Apr 8 12:18:35 UTC 2015


On Tue, Apr 07, 2015 at 09:23:15AM -0400, John Ferlan wrote:
> Future IOThread setting patches would copy the code anyway, so create
> and generalize the add the vcpu to a cgroup into its own API.
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  src/qemu/qemu_driver.c | 65 +++++++++++++++++++++++++++++++++-----------------
>  1 file changed, 43 insertions(+), 22 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index be54b7e..1114ce9 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -4635,9 +4635,44 @@ static void qemuProcessEventHandler(void *data, void *opaque)
>      VIR_FREE(processEvent);
>  }
>  
> -static int qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
> -                                  virDomainObjPtr vm,
> -                                  unsigned int nvcpus)
> +static virCgroupPtr
> +qemuDomainHotplugAddCgroup(virCgroupPtr cgroup,

qemuDomainAddCgroupForThread would be better IMHO.

> +                           virCgroupThreadName nameval,
> +                           int index,
> +                           char *mem_mask,
> +                           pid_t pid)
> +{
> +    virCgroupPtr new_cgroup = NULL;
> +    int rv = -1;
> +
> +    /* Create cgroup */
> +    if (virCgroupNewThread(cgroup, nameval, index, true, &new_cgroup) < 0)
> +        return NULL;
> +
> +    if (mem_mask && virCgroupSetCpusetMems(new_cgroup, mem_mask) < 0)
> +        goto error;
> +
> +    /* Add pid/thread to the cgroup */
> +    rv = virCgroupAddTask(new_cgroup, pid);
> +    if (rv < 0) {
> +        virReportSystemError(-rv,
> +                             _("unable to add id %d task %d to cgroup"),
> +                             index, pid);
> +        virCgroupRemove(new_cgroup);
> +        goto error;
> +    }
> +
> +    return new_cgroup;
> +
> + error:
> +    virCgroupFree(&new_cgroup);
> +    return NULL;
> +}
> +
> +static int
> +qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
> +                       virDomainObjPtr vm,
> +                       unsigned int nvcpus)
>  {
>      qemuDomainObjPrivatePtr priv = vm->privateData;
>      size_t i;
> @@ -4726,26 +4761,12 @@ static int qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
>      if (nvcpus > oldvcpus) {
>          for (i = oldvcpus; i < nvcpus; i++) {
>              if (priv->cgroup) {
> -                int rv = -1;
> -                /* Create cgroup for the onlined vcpu */
> -                if (virCgroupNewThread(priv->cgroup, VIR_CGROUP_VCPU_NAME, i,
> -                                       true, &cgroup_vcpu) < 0)
> +                cgroup_vcpu = qemuDomainHotplugAddCgroup(priv->cgroup,
> +                                                         VIR_CGROUP_VCPU_NAME,
> +                                                         i, mem_mask,
> +                                                         cpupids[i]);
> +                if (!cgroup_vcpu)
>                      goto cleanup;
> -
> -                if (mem_mask &&
> -                    virCgroupSetCpusetMems(cgroup_vcpu, mem_mask) < 0)
> -                    goto cleanup;
> -
> -                /* Add vcpu thread to the cgroup */
> -                rv = virCgroupAddTask(cgroup_vcpu, cpupids[i]);
> -                if (rv < 0) {
> -                    virReportSystemError(-rv,
> -                                         _("unable to add vcpu %zu task %d to cgroup"),
> -                                         i, cpupids[i]);
> -                    virCgroupRemove(cgroup_vcpu);
> -                    goto cleanup;
> -                }
> -
>              }
>  
>              /* Inherit def->cpuset */

ACK

Jan
-------------- 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/20150408/b773e588/attachment-0001.sig>


More information about the libvir-list mailing list