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 <[email protected]> > --- > 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
signature.asc
Description: Digital signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
