static int virLXCCgroupSetupCpusetTune(virDomainDefPtr def, virCgroupPtr cgroup, virBitmapPtr nodemask) { int ret = -1; char *mask = NULL; if (def->placement_mode != VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO && def->cpumask) { if (!(mask = virBitmapFormat(def->cpumask))) return -1; if (virCgroupSetCpusetCpus(cgroup, mask) < 0) goto cleanup; } if (virDomainNumatuneGetMode(def->numa, -1) != VIR_DOMAIN_NUMATUNE_MEM_STRICT) goto cleanup; if (virDomainNumatuneMaybeFormatNodeset(def->numa, nodemask, &mask, -1) < 0) goto cleanup; if (mask && virCgroupSetCpusetMems(cgroup, mask) < 0) goto cleanup; ret = 0; cleanup: VIR_FREE(mask); return ret; }
static int virLXCCgroupSetupCpusetTune(virDomainDefPtr def, virCgroupPtr cgroup, virBitmapPtr nodemask) { int ret = -1; char *mask = NULL; if (def->placement_mode != VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO && def->cpumask) { mask = virBitmapFormat(def->cpumask); if (!mask) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to convert cpumask")); return -1; } if (virCgroupSetCpusetCpus(cgroup, mask) < 0) goto cleanup; } if ((def->numatune.memory.nodemask || (def->numatune.memory.placement_mode == VIR_NUMA_TUNE_MEM_PLACEMENT_MODE_AUTO)) && def->numatune.memory.mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT) { if (def->numatune.memory.placement_mode == VIR_NUMA_TUNE_MEM_PLACEMENT_MODE_AUTO) mask = virBitmapFormat(nodemask); else mask = virBitmapFormat(def->numatune.memory.nodemask); if (!mask) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to convert memory nodemask")); return -1; } if (virCgroupSetCpusetMems(cgroup, mask) < 0) goto cleanup; } ret = 0; cleanup: VIR_FREE(mask); return ret; }
int qemuSetupCgroupCpusetCpus(virCgroupPtr cgroup, virBitmapPtr cpumask) { int ret = -1; char *new_cpus = NULL; if (!(new_cpus = virBitmapFormat(cpumask))) goto cleanup; if (virCgroupSetCpusetCpus(cgroup, new_cpus) < 0) goto cleanup; ret = 0; cleanup: VIR_FREE(new_cpus); return ret; }
int qemuSetupCgroupEmulatorPin(virCgroupPtr cgroup, virBitmapPtr cpumask) { int ret = -1; char *new_cpus = NULL; new_cpus = virBitmapFormat(cpumask); if (!new_cpus) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to convert cpu mask")); goto cleanup; } if (virCgroupSetCpusetCpus(cgroup, new_cpus) < 0) goto cleanup; ret = 0; cleanup: VIR_FREE(new_cpus); return ret; }
static int qemuSetupCpusetCgroup(virDomainObjPtr vm, virBitmapPtr nodemask, virCapsPtr caps) { qemuDomainObjPrivatePtr priv = vm->privateData; char *mem_mask = NULL; char *cpu_mask = NULL; int ret = -1; if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET)) return 0; if ((vm->def->numatune.memory.nodemask || (vm->def->numatune.memory.placement_mode == VIR_NUMA_TUNE_MEM_PLACEMENT_MODE_AUTO)) && vm->def->numatune.memory.mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT) { if (vm->def->numatune.memory.placement_mode == VIR_NUMA_TUNE_MEM_PLACEMENT_MODE_AUTO) mem_mask = virBitmapFormat(nodemask); else mem_mask = virBitmapFormat(vm->def->numatune.memory.nodemask); if (!mem_mask) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to convert memory nodemask")); goto cleanup; } if (virCgroupSetCpusetMems(priv->cgroup, mem_mask) < 0) goto cleanup; } if (vm->def->cpumask || (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO)) { if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) { virBitmapPtr cpumap; if (!(cpumap = virCapabilitiesGetCpusForNodemask(caps, nodemask))) goto cleanup; cpu_mask = virBitmapFormat(cpumap); virBitmapFree(cpumap); } else { cpu_mask = virBitmapFormat(vm->def->cpumask); } if (!cpu_mask) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to convert cpu mask")); goto cleanup; } if (virCgroupSetCpusetCpus(priv->cgroup, cpu_mask) < 0) goto cleanup; } ret = 0; cleanup: VIR_FREE(mem_mask); VIR_FREE(cpu_mask); return ret; }