diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 6276a615f2..335763fdde 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -798,7 +798,9 @@ for <memory>. For backwards compatibility, output is always in KiB. unit - since 0.9.11 + since 0.9.11 + Possible values for all *_limit parameters are in range from 0 to + VIR_DOMAIN_MEMORY_PARAM_UNLIMITED.
hard_limit
The optional hard_limit element is the maximum memory the guest can use. The units for this value are kibibytes (i.e. blocks diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 5467befe3d..01a3fbc3ab 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2320,6 +2320,10 @@ virDomainDefNew(void) if (!(ret->numa = virDomainNumaNew())) goto error; + ret->mem.hard_limit = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; + ret->mem.soft_limit = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; + ret->mem.swap_hard_limit = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; + return ret; error: @@ -6926,6 +6930,50 @@ virDomainParseMemory(const char *xpath, } +/** + * virDomainParseMemoryLimit: + * + * @xpath: XPath to memory amount + * @units_xpath: XPath to units attribute + * @ctxt: XPath context + * @mem: scaled memory amount is stored here + * + * Parse a memory element or attribute located at @xpath within @ctxt, and + * store the result into @mem, in blocks of 1024. The value is scaled by + * units located at @units_xpath (or the 'unit' attribute under @xpath if + * @units_xpath is NULL). If units are not present, he default scale of 1024 + * is used. The value must not exceed VIR_DOMAIN_MEMORY_PARAM_UNLIMITED + * once scaled. + * + * This helper should be used only on *_limit memory elements. + * + * Return 0 on success, -1 on failure after issuing error. + */ +static int +virDomainParseMemoryLimit(const char *xpath, + const char *units_xpath, + xmlXPathContextPtr ctxt, + unsigned long long *mem) +{ + int ret; + unsigned long long bytes; + + ret = virDomainParseScaledValue(xpath, units_xpath, ctxt, &bytes, 1024, + VIR_DOMAIN_MEMORY_PARAM_UNLIMITED << 10, + false); + + if (ret < 0) + return -1; + + if (ret == 0) + *mem = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; + else + *mem = virMemoryLimitTruncate(VIR_DIV_UP(bytes, 1024)); + + return 0; +} + + static int virDomainControllerModelTypeFromString(const virDomainControllerDef *def, const char *model) @@ -13227,20 +13275,20 @@ virDomainDefParseXML(xmlDocPtr xml, VIR_FREE(nodes); /* Extract other memory tunables */ - if (virDomainParseMemory("./memtune/hard_limit[1]", NULL, ctxt, - &def->mem.hard_limit, false, false) < 0) + if (virDomainParseMemoryLimit("./memtune/hard_limit[1]", NULL, ctxt, + &def->mem.hard_limit) < 0) goto error; - if (virDomainParseMemory("./memtune/soft_limit[1]", NULL, ctxt, - &def->mem.soft_limit, false, false) < 0) + if (virDomainParseMemoryLimit("./memtune/soft_limit[1]", NULL, ctxt, + &def->mem.soft_limit) < 0) goto error; if (virDomainParseMemory("./memtune/min_guarantee[1]", NULL, ctxt, &def->mem.min_guarantee, false, false) < 0) goto error; - if (virDomainParseMemory("./memtune/swap_hard_limit[1]", NULL, ctxt, - &def->mem.swap_hard_limit, false, false) < 0) + if (virDomainParseMemoryLimit("./memtune/swap_hard_limit[1]", NULL, ctxt, + &def->mem.swap_hard_limit) < 0) goto error; n = virXPathULong("string(./vcpu[1])", ctxt, &count); @@ -19809,20 +19857,17 @@ virDomainDefFormatInternal(virDomainDefPtr def, } /* add memtune only if there are any */ - if ((def->mem.hard_limit && - def->mem.hard_limit != VIR_DOMAIN_MEMORY_PARAM_UNLIMITED) || - (def->mem.soft_limit && - def->mem.soft_limit != VIR_DOMAIN_MEMORY_PARAM_UNLIMITED) || - (def->mem.swap_hard_limit && - def->mem.swap_hard_limit != VIR_DOMAIN_MEMORY_PARAM_UNLIMITED) || + if (virMemoryLimitIsSet(def->mem.hard_limit) || + virMemoryLimitIsSet(def->mem.soft_limit) || + virMemoryLimitIsSet(def->mem.swap_hard_limit) || def->mem.min_guarantee) { virBufferAddLit(buf, "\n"); virBufferAdjustIndent(buf, 2); - if (def->mem.hard_limit) { + if (virMemoryLimitIsSet(def->mem.hard_limit)) { virBufferAsprintf(buf, "" "%llu\n", def->mem.hard_limit); } - if (def->mem.soft_limit) { + if (virMemoryLimitIsSet(def->mem.soft_limit)) { virBufferAsprintf(buf, "" "%llu\n", def->mem.soft_limit); } @@ -19830,7 +19875,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, virBufferAsprintf(buf, "" "%llu\n", def->mem.min_guarantee); } - if (def->mem.swap_hard_limit) { + if (virMemoryLimitIsSet(def->mem.swap_hard_limit)) { virBufferAsprintf(buf, "" "%llu\n", def->mem.swap_hard_limit); } diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 89d1eab172..83453978df 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -2075,6 +2075,9 @@ virDomainSetMemoryStatsPeriod(virDomainPtr domain, int period, * Change all or a subset of the memory tunables. * This function may require privileged access to the hypervisor. * + * Possible values for all *_limit memory tunables are in range from 0 to + * VIR_DOMAIN_MEMORY_PARAM_UNLIMITED. + * * Returns -1 in case of error, 0 in case of success. */ int diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 3590bd7371..a579bc5516 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2233,7 +2233,6 @@ virUSBDeviceSetUsedBy; # util/virutil.h -virCompareLimitUlong; virDoubleToStr; virEnumFromString; virEnumToString; diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c index 8e46a01284..5a49e2d5a1 100644 --- a/src/lxc/lxc_cgroup.c +++ b/src/lxc/lxc_cgroup.c @@ -149,17 +149,17 @@ static int virLXCCgroupSetupMemTune(virDomainDefPtr def, if (virCgroupSetMemory(cgroup, def->mem.max_balloon) < 0) goto cleanup; - if (def->mem.hard_limit && - virCgroupSetMemoryHardLimit(cgroup, def->mem.hard_limit) < 0) - goto cleanup; + if (virMemoryLimitIsSet(def->mem.hard_limit)) + if (virCgroupSetMemoryHardLimit(cgroup, def->mem.hard_limit) < 0) + goto cleanup; - if (def->mem.soft_limit && - virCgroupSetMemorySoftLimit(cgroup, def->mem.soft_limit) < 0) - goto cleanup; + if (virMemoryLimitIsSet(def->mem.soft_limit)) + if (virCgroupSetMemorySoftLimit(cgroup, def->mem.soft_limit) < 0) + goto cleanup; - if (def->mem.swap_hard_limit && - virCgroupSetMemSwapHardLimit(cgroup, def->mem.swap_hard_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: diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 3a28dd55e3..6b0dea1628 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -874,7 +874,7 @@ lxcDomainSetMemoryParameters(virDomainPtr dom, if (set_hard_limit) mem_limit = hard_limit; - if (virCompareLimitUlong(mem_limit, swap_limit) > 0) { + if (mem_limit > swap_limit) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("memory hard_limit tunable value must be lower " "than or equal to swap_hard_limit")); @@ -902,7 +902,7 @@ lxcDomainSetMemoryParameters(virDomainPtr dom, LXC_SET_MEM_PARAMETER(virCgroupSetMemorySoftLimit, soft_limit); /* set hard limit before swap hard limit if decreasing it */ - if (virCompareLimitUlong(vm->def->mem.hard_limit, hard_limit) > 0) { + if (vm->def->mem.hard_limit > hard_limit) { LXC_SET_MEM_PARAMETER(virCgroupSetMemoryHardLimit, hard_limit); /* inhibit changing the limit a second time */ set_hard_limit = false; @@ -983,7 +983,6 @@ lxcDomainGetMemoryParameters(virDomainPtr dom, case 0: /* fill memory hard limit here */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { val = vmdef->mem.hard_limit; - val = val ? val : VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; } else if (virCgroupGetMemoryHardLimit(priv->cgroup, &val) < 0) { goto cleanup; } @@ -994,7 +993,6 @@ lxcDomainGetMemoryParameters(virDomainPtr dom, case 1: /* fill memory soft limit here */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { val = vmdef->mem.soft_limit; - val = val ? val : VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; } else if (virCgroupGetMemorySoftLimit(priv->cgroup, &val) < 0) { goto cleanup; } @@ -1005,7 +1003,6 @@ lxcDomainGetMemoryParameters(virDomainPtr dom, case 2: /* fill swap hard limit here */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { val = vmdef->mem.swap_hard_limit; - val = val ? val : VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; } else if (virCgroupGetMemSwapHardLimit(priv->cgroup, &val) < 0) { goto cleanup; } diff --git a/src/lxc/lxc_fuse.c b/src/lxc/lxc_fuse.c index 5c18cff0ae..bc2b92c045 100644 --- a/src/lxc/lxc_fuse.c +++ b/src/lxc/lxc_fuse.c @@ -165,11 +165,13 @@ static int lxcProcReadMeminfo(char *hostpath, virDomainDefPtr def, *ptr = '\0'; if (STREQ(line, "MemTotal") && - (def->mem.hard_limit || def->mem.max_balloon)) { + (virMemoryLimitIsSet(def->mem.hard_limit) || + def->mem.max_balloon)) { virBufferAsprintf(new_meminfo, "MemTotal: %8llu kB\n", meminfo.memtotal); } else if (STREQ(line, "MemFree") && - (def->mem.hard_limit || def->mem.max_balloon)) { + (virMemoryLimitIsSet(def->mem.hard_limit) || + def->mem.max_balloon)) { virBufferAsprintf(new_meminfo, "MemFree: %8llu kB\n", (meminfo.memtotal - meminfo.memusage)); } else if (STREQ(line, "Buffers")) { @@ -198,10 +200,12 @@ static int lxcProcReadMeminfo(char *hostpath, virDomainDefPtr def, } else if (STREQ(line, "Unevictable")) { virBufferAsprintf(new_meminfo, "Unevictable: %8llu kB\n", meminfo.unevictable); - } else if (STREQ(line, "SwapTotal") && def->mem.swap_hard_limit) { + } else if (STREQ(line, "SwapTotal") && + virMemoryLimitIsSet(def->mem.swap_hard_limit)) { virBufferAsprintf(new_meminfo, "SwapTotal: %8llu kB\n", (meminfo.swaptotal - meminfo.memtotal)); - } else if (STREQ(line, "SwapFree") && def->mem.swap_hard_limit) { + } else if (STREQ(line, "SwapFree") && + virMemoryLimitIsSet(def->mem.swap_hard_limit)) { virBufferAsprintf(new_meminfo, "SwapFree: %8llu kB\n", (meminfo.swaptotal - meminfo.memtotal - meminfo.swapusage + meminfo.memusage)); diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c index abf07ce68b..2ebe6102bf 100644 --- a/src/lxc/lxc_native.c +++ b/src/lxc/lxc_native.c @@ -773,7 +773,7 @@ lxcSetMemTune(virDomainDefPtr def, virConfPtr properties) return -1; size = size / 1024; def->mem.max_balloon = size; - def->mem.hard_limit = size; + def->mem.hard_limit = virMemoryLimitTruncate(size); } if ((value = virConfGetValue(properties, @@ -782,7 +782,7 @@ lxcSetMemTune(virDomainDefPtr def, virConfPtr properties) if (lxcConvertSize(value->str, &size) < 0) return -1; - def->mem.soft_limit = size / 1024; + def->mem.soft_limit = virMemoryLimitTruncate(size / 1024); } if ((value = virConfGetValue(properties, @@ -791,7 +791,7 @@ lxcSetMemTune(virDomainDefPtr def, virConfPtr properties) if (lxcConvertSize(value->str, &size) < 0) return -1; - def->mem.swap_hard_limit = size / 1024; + def->mem.swap_hard_limit = virMemoryLimitTruncate(size / 1024); } return 0; } diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index 848e230b63..bfa21410b2 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -479,12 +479,12 @@ openvzReadMemConf(virDomainDefPtr def, int veid) goto error; } if (barrier == LONG_MAX) - def->mem.soft_limit = 0ull; + def->mem.soft_limit = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; else def->mem.soft_limit = barrier * kb_per_pages; if (limit == LONG_MAX) - def->mem.hard_limit = 0ull; + def->mem.hard_limit = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; else def->mem.hard_limit = limit * kb_per_pages; } diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index 5a5cd8d4b2..a55e6a658f 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -1850,7 +1850,7 @@ openvzDomainGetMemoryParameters(virDomainPtr domain, if (openvzDomainGetBarrierLimit(domain, name, &barrier, &limit) < 0) goto cleanup; - val = (limit == LONG_MAX) ? 0ull : limit * kb_per_pages; + val = (limit == LONG_MAX) ? VIR_DOMAIN_MEMORY_PARAM_UNLIMITED : limit * kb_per_pages; if (virTypedParameterAssign(param, VIR_DOMAIN_MEMORY_HARD_LIMIT, VIR_TYPED_PARAM_ULLONG, val) < 0) goto cleanup; @@ -1861,7 +1861,7 @@ openvzDomainGetMemoryParameters(virDomainPtr domain, if (openvzDomainGetBarrierLimit(domain, name, &barrier, &limit) < 0) goto cleanup; - val = (barrier == LONG_MAX) ? 0ull : barrier * kb_per_pages; + val = (barrier == LONG_MAX) ? VIR_DOMAIN_MEMORY_PARAM_UNLIMITED : barrier * kb_per_pages; if (virTypedParameterAssign(param, VIR_DOMAIN_MEMORY_SOFT_LIMIT, VIR_TYPED_PARAM_ULLONG, val) < 0) goto cleanup; diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index f8f0e3c840..2b5a182874 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -471,9 +471,9 @@ qemuSetupMemoryCgroup(virDomainObjPtr vm) qemuDomainObjPrivatePtr priv = vm->privateData; if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_MEMORY)) { - if (vm->def->mem.hard_limit != 0 || - vm->def->mem.soft_limit != 0 || - vm->def->mem.swap_hard_limit != 0) { + 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; @@ -482,17 +482,17 @@ qemuSetupMemoryCgroup(virDomainObjPtr vm) } } - if (vm->def->mem.hard_limit != 0 && - virCgroupSetMemoryHardLimit(priv->cgroup, vm->def->mem.hard_limit) < 0) - return -1; + if (virMemoryLimitIsSet(vm->def->mem.hard_limit)) + if (virCgroupSetMemoryHardLimit(priv->cgroup, vm->def->mem.hard_limit) < 0) + return -1; - if (vm->def->mem.soft_limit != 0 && - virCgroupSetMemorySoftLimit(priv->cgroup, vm->def->mem.soft_limit) < 0) - return -1; + if (virMemoryLimitIsSet(vm->def->mem.soft_limit)) + if (virCgroupSetMemorySoftLimit(priv->cgroup, vm->def->mem.soft_limit) < 0) + return -1; - if (vm->def->mem.swap_hard_limit != 0 && - virCgroupSetMemSwapHardLimit(priv->cgroup, vm->def->mem.swap_hard_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; } diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index ab813af064..1510797def 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8409,8 +8409,10 @@ qemuBuildCommandLine(virConnectPtr conn, /* If we have no cgroups then we can have no tunings that * require them */ - if (def->mem.hard_limit || def->mem.soft_limit || - def->mem.min_guarantee || def->mem.swap_hard_limit) { + if (virMemoryLimitIsSet(def->mem.hard_limit) || + virMemoryLimitIsSet(def->mem.soft_limit) || + def->mem.min_guarantee || + virMemoryLimitIsSet(def->mem.swap_hard_limit)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Memory tuning is not available in session mode")); goto error; @@ -10483,7 +10485,7 @@ qemuBuildCommandLine(virConnectPtr conn, * space just to be safe (some finer tuning might be * nice, though). */ - memKB = def->mem.hard_limit ? + memKB = virMemoryLimitIsSet(def->mem.hard_limit) ? def->mem.hard_limit : def->mem.max_balloon + 1024 * 1024; virCommandSetMaxMemLock(cmd, memKB * 1024); } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ffa4e193d6..a79bc5ef47 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -9143,8 +9143,7 @@ qemuDomainSetMemoryParameters(virDomainPtr dom, #undef VIR_GET_LIMIT_PARAMETER - /* Swap hard limit must be greater than hard limit. - * Note that limit of 0 denotes unlimited */ + /* Swap hard limit must be greater than hard limit. */ if (set_swap_hard_limit || set_hard_limit) { unsigned long long mem_limit = vm->def->mem.hard_limit; unsigned long long swap_limit = vm->def->mem.swap_hard_limit; @@ -9155,7 +9154,7 @@ qemuDomainSetMemoryParameters(virDomainPtr dom, if (set_hard_limit) mem_limit = hard_limit; - if (virCompareLimitUlong(mem_limit, swap_limit) > 0) { + if (mem_limit > swap_limit) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("memory hard_limit tunable value must be lower " "than or equal to swap_hard_limit")); @@ -9183,7 +9182,7 @@ qemuDomainSetMemoryParameters(virDomainPtr dom, QEMU_SET_MEM_PARAMETER(virCgroupSetMemorySoftLimit, soft_limit); /* set hard limit before swap hard limit if decreasing it */ - if (virCompareLimitUlong(vm->def->mem.hard_limit, hard_limit) > 0) { + if (vm->def->mem.hard_limit > hard_limit) { QEMU_SET_MEM_PARAMETER(virCgroupSetMemoryHardLimit, hard_limit); /* inhibit changing the limit a second time */ set_hard_limit = false; @@ -9279,7 +9278,6 @@ qemuDomainGetMemoryParameters(virDomainPtr dom, switch (i) { case 0: /* fill memory hard limit here */ value = persistentDef->mem.hard_limit; - value = value ? value : VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; if (virTypedParameterAssign(param, VIR_DOMAIN_MEMORY_HARD_LIMIT, VIR_TYPED_PARAM_ULLONG, value) < 0) goto cleanup; @@ -9287,7 +9285,6 @@ qemuDomainGetMemoryParameters(virDomainPtr dom, case 1: /* fill memory soft limit here */ value = persistentDef->mem.soft_limit; - value = value ? value : VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; if (virTypedParameterAssign(param, VIR_DOMAIN_MEMORY_SOFT_LIMIT, VIR_TYPED_PARAM_ULLONG, value) < 0) goto cleanup; @@ -9295,7 +9292,6 @@ qemuDomainGetMemoryParameters(virDomainPtr dom, case 2: /* fill swap hard limit here */ value = persistentDef->mem.swap_hard_limit; - value = value ? value : VIR_DOMAIN_MEMORY_PARAM_UNLIMITED; if (virTypedParameterAssign(param, VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT, VIR_TYPED_PARAM_ULLONG, value) < 0) goto cleanup; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 08047ce1f4..6ad48f7848 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1250,7 +1250,7 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, * Kibibytes, but virProcessSetMaxMemLock expects the value in * bytes. */ - memKB = vm->def->mem.hard_limit + memKB = virMemoryLimitIsSet(vm->def->mem.hard_limit) ? vm->def->mem.hard_limit : vm->def->mem.max_balloon + (1024 * 1024); virProcessSetMaxMemLock(vm->pid, memKB * 1024); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 20e40aa37a..83be435a63 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2986,7 +2986,8 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, QEMU_MIGRATION_COOKIE_NBD))) goto cleanup; - if (STREQ_NULLABLE(protocol, "rdma") && !vm->def->mem.hard_limit) { + if (STREQ_NULLABLE(protocol, "rdma") && + !virMemoryLimitIsSet(vm->def->mem.hard_limit)) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("cannot start RDMA migration with no memory hard " "limit set")); @@ -4102,7 +4103,7 @@ static int doNativeMigrate(virQEMUDriverPtr driver, "with this QEMU binary")); goto cleanup; } - if (!vm->def->mem.hard_limit) { + if (!virMemoryLimitIsSet(vm->def->mem.hard_limit)) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("cannot start RDMA migration with no memory hard " "limit set")); diff --git a/src/util/virutil.c b/src/util/virutil.c index 599d59c4d3..658723b8e5 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -2364,29 +2364,6 @@ virFindFCHostCapableVport(const char *sysfs_prefix ATTRIBUTE_UNUSED) #endif /* __linux__ */ -/** - * virCompareLimitUlong: - * - * Compare two unsigned long long numbers. Value '0' of the arguments has a - * special meaning of 'unlimited' and thus greater than any other value. - * - * Returns 0 if the numbers are equal, -1 if b is greater, 1 if a is greater. - */ -int -virCompareLimitUlong(unsigned long long a, unsigned long long b) -{ - if (a == b) - return 0; - - if (!b) - return -1; - - if (a == 0 || a > b) - return 1; - - return -1; -} - /** * virParseOwnershipIds: * diff --git a/src/util/virutil.h b/src/util/virutil.h index b8f503681e..25524e21e2 100644 --- a/src/util/virutil.h +++ b/src/util/virutil.h @@ -210,8 +210,6 @@ char *virGetFCHostNameByWWN(const char *sysfs_prefix, char *virFindFCHostCapableVport(const char *sysfs_prefix); -int virCompareLimitUlong(unsigned long long a, unsigned long long b); - int virParseOwnershipIds(const char *label, uid_t *uidPtr, gid_t *gidPtr); const char *virGetEnvBlockSUID(const char *name); diff --git a/tests/qemuxml2argvdata/qemuxml2argv-memtune.xml b/tests/qemuxml2argvdata/qemuxml2argv-memtune.xml index 1a244f0098..f838d9512f 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-memtune.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-memtune.xml @@ -5,7 +5,7 @@ 219136 512000 - 131071999 + 0 1048576 1 diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-memtune.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-memtune.xml index 92dcacf6ea..07989d18cb 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-memtune.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-memtune.xml @@ -5,7 +5,7 @@ 219136 512000 - 128000 + 0 1024000 1