qemu: reflect any memory rounding back to xml

If we round up a user's memory request, we should update the XML
to reflect the actual value in use by the VM, rather than giving
an artificially small value back to the user.

* src/qemu/qemu_command.c (qemuBuildNumaArgStr)
(qemuBuildCommandLine): Reflect rounding back to XML.
This commit is contained in:
Eric Blake 2012-03-30 09:40:09 -06:00
parent 4a86c2bb4b
commit 095b0bc46a

View File

@ -3902,8 +3902,9 @@ qemuBuildNumaArgStr(const virDomainDefPtr def, virCommandPtr cmd)
virBufferAsprintf(&buf, "node,nodeid=%d", def->cpu->cells[i].cellid);
virBufferAddLit(&buf, ",cpus=");
qemuBuildNumaCPUArgStr(def->cpu->cells[i].cpumask, &buf);
virBufferAsprintf(&buf, "mem=%d",
VIR_DIV_UP(def->cpu->cells[i].mem, 1024));
def->cpu->cells[i].mem = VIR_DIV_UP(def->cpu->cells[i].mem,
1024) * 1024;
virBufferAsprintf(&buf, "mem=%d", def->cpu->cells[i].mem / 1024);
if (virBufferError(&buf))
goto error;
@ -4047,10 +4048,12 @@ qemuBuildCommandLine(virConnectPtr conn,
/* Set '-m MB' based on maxmem, because the lower 'memory' limit
* is set post-startup using the balloon driver. If balloon driver
* is not supported, then they're out of luck anyway
* is not supported, then they're out of luck anyway. Update the
* XML to reflect our rounding.
*/
virCommandAddArg(cmd, "-m");
virCommandAddArgFormat(cmd, "%llu", VIR_DIV_UP(def->mem.max_balloon, 1024));
def->mem.max_balloon = VIR_DIV_UP(def->mem.max_balloon, 1024) * 1024;
virCommandAddArgFormat(cmd, "%llu", def->mem.max_balloon / 1024);
if (def->mem.hugepage_backed) {
if (!driver->hugetlbfs_mount) {
qemuReportError(VIR_ERR_INTERNAL_ERROR,