<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div><font face="Courier">I submitted bug <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1038363">https://bugzilla.redhat.com/show_bug.cgi?id=1038363</a> for being unable to raise the persistent mem/vcpu values above a live domain’s maxmem/maxvcpu values (rather than the persistent maxmem/maxvcpu values). I was asked to submit my patch here for a wider review.</font></div><div><font face="Courier"><br></font></div><div><font face="Courier">For memory, check the newmem value against mem.max_baloon of the live def for non-persistent changes, or mem.max_baloon of the persistent def for persistent changes. Same theory for setting vcpus/maxvcpus.</font></div><div><font face="Courier"><br></font></div><div><div><font face="Courier">--- a/libvirt0/libvirt-1.1.1/src/qemu/qemu_driver.c</font></div><div><font face="Courier">+++ b/libvirt0/libvirt-1.1.1/src/qemu/qemu_driver.c</font></div><div><font face="Courier">@@ -2236,13 +2236,13 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem,</font></div><div><font face="Courier">     } else {</font></div><div><font face="Courier">         /* resize the current memory */</font></div><div><font face="Courier"> </font></div><div><font face="Courier">-        if (newmem > vm->def->mem.max_balloon) {</font></div><div><font face="Courier">-            virReportError(VIR_ERR_INVALID_ARG, "%s",</font></div><div><font face="Courier">-                           _("cannot set memory higher than max memory"));</font></div><div><font face="Courier">-            goto endjob;</font></div><div><font face="Courier">-        }</font></div><div><font face="Courier">-</font></div><div><font face="Courier">         if (flags & VIR_DOMAIN_AFFECT_LIVE) {</font></div><div><font face="Courier">+            if (newmem > vm->def->mem.max_balloon) {</font></div><div><font face="Courier">+                virReportError(VIR_ERR_INVALID_ARG, "%s",</font></div><div><font face="Courier">+                    _("cannot set memory higher than max memory"));</font></div><div><font face="Courier">+                goto endjob;</font></div><div><font face="Courier">+            }</font></div><div><font face="Courier">+</font></div><div><font face="Courier">             priv = vm->privateData;</font></div><div><font face="Courier">             qemuDomainObjEnterMonitor(driver, vm);</font></div><div><font face="Courier">             r = qemuMonitorSetBalloon(priv->mon, newmem);</font></div><div><font face="Courier">@@ -2262,6 +2262,12 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem,</font></div><div><font face="Courier">         }</font></div><div><font face="Courier"> </font></div><div><font face="Courier">         if (flags & VIR_DOMAIN_AFFECT_CONFIG) {</font></div><div><font face="Courier">+            if (newmem > persistentDef->mem.max_balloon) {</font></div><div><font face="Courier">+                virReportError(VIR_ERR_INVALID_ARG, "%s",</font></div><div><font face="Courier">+                    _("cannot set memory higher than max memory"));</font></div><div><font face="Courier">+                goto endjob;</font></div><div><font face="Courier">+            }</font></div><div><font face="Courier">+</font></div><div><font face="Courier">             sa_assert(persistentDef);</font></div><div><font face="Courier">             persistentDef->mem.cur_balloon = newmem;</font></div><div><font face="Courier">             ret = virDomainSaveConfig(cfg->configDir, persistentDef);</font></div><div><font face="Courier">@@ -4160,6 +4166,7 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,</font></div><div><font face="Courier">     virDomainDefPtr persistentDef;</font></div><div><font face="Courier">     int ret = -1;</font></div><div><font face="Courier">     bool maximum;</font></div><div><font face="Courier">+    unsigned int maxvcpus;</font></div><div><font face="Courier">     virQEMUDriverConfigPtr cfg = NULL;</font></div><div><font face="Courier">     virCapsPtr caps = NULL;</font></div><div><font face="Courier">     qemuAgentCPUInfoPtr cpuinfo = NULL;</font></div><div><font face="Courier">@@ -4207,11 +4214,12 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,</font></div><div><font face="Courier">         goto endjob;</font></div><div><font face="Courier">     }</font></div><div><font face="Courier"> </font></div><div><font face="Courier">-    if (!maximum && nvcpus > vm->def->maxvcpus) {</font></div><div><font face="Courier">+    maxvcpus = (flags & VIR_DOMAIN_AFFECT_LIVE) ? vm->def->maxvcpus : persistentDef->maxvcpus;</font></div><div><font face="Courier">+    if (!maximum && nvcpus > maxvcpus) {</font></div><div><font face="Courier">         virReportError(VIR_ERR_INVALID_ARG,</font></div><div><font face="Courier">                        _("requested vcpus is greater than max allowable"</font></div><div><font face="Courier">                          " vcpus for the domain: %d > %d"),</font></div><div><font face="Courier">-                       nvcpus, vm->def->maxvcpus);</font></div><div><font face="Courier">+                       nvcpus, maxvcpus);</font></div><div><font face="Courier">         goto endjob;</font></div><div><font face="Courier">     }</font></div><div><font face="Courier"> </font></div></div></body></html>