[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