static int qemuSetupMemoryCgroup(virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv = vm->privateData; if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_MEMORY)) { if (virMemoryLimitIsSet(vm->def->mem.hard_limit) || virMemoryLimitIsSet(vm->def->mem.soft_limit) || virMemoryLimitIsSet(vm->def->mem.swap_hard_limit)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Memory cgroup is not available on this host")); return -1; } else { return 0; } } if (virMemoryLimitIsSet(vm->def->mem.hard_limit)) if (virCgroupSetMemoryHardLimit(priv->cgroup, vm->def->mem.hard_limit) < 0) return -1; if (virMemoryLimitIsSet(vm->def->mem.soft_limit)) if (virCgroupSetMemorySoftLimit(priv->cgroup, vm->def->mem.soft_limit) < 0) return -1; if (virMemoryLimitIsSet(vm->def->mem.swap_hard_limit)) if (virCgroupSetMemSwapHardLimit(priv->cgroup, vm->def->mem.swap_hard_limit) < 0) return -1; return 0; }
static int virLXCCgroupSetupMemTune(virDomainDefPtr def, virCgroupPtr cgroup) { int ret = -1; if (virCgroupSetMemory(cgroup, virDomainDefGetMemoryInitial(def)) < 0) goto cleanup; if (virMemoryLimitIsSet(def->mem.hard_limit)) if (virCgroupSetMemoryHardLimit(cgroup, def->mem.hard_limit) < 0) goto cleanup; if (virMemoryLimitIsSet(def->mem.soft_limit)) if (virCgroupSetMemorySoftLimit(cgroup, def->mem.soft_limit) < 0) goto cleanup; if (virMemoryLimitIsSet(def->mem.swap_hard_limit)) if (virCgroupSetMemSwapHardLimit(cgroup, def->mem.swap_hard_limit) < 0) goto cleanup; ret = 0; cleanup: return ret; }