]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Adjust the cur_ballon on coldplug/unplug of dimms
authorShivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
Thu, 21 Jul 2016 10:09:30 +0000 (15:39 +0530)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 27 Jul 2016 11:21:39 +0000 (13:21 +0200)
The cur_balloon also increases/decreases with dimm hotplug/unplug.
To be consistent, adjust the value for coldplug too. This was inconsistently
taken care when cur_ballon != memory to begin with. The patch fixes it
irrespective of that.

Signed-off-by: Shivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
src/conf/domain_conf.c
src/qemu/qemu_driver.c

index 13e5dc9792febe02739114f112551fe2e8caccfb..c1ddb5a09d91bfa323762f9d27e0904dddccf9f3 100644 (file)
@@ -14623,10 +14623,6 @@ virDomainMemoryRemove(virDomainDefPtr def,
 
     VIR_DELETE_ELEMENT(def->mems, idx, def->nmems);
 
-    /* fix up balloon size */
-    if (def->mem.cur_balloon > virDomainDefGetMemoryTotal(def))
-        def->mem.cur_balloon = virDomainDefGetMemoryTotal(def);
-
     /* fix total memory size of the domain */
     virDomainDefSetMemoryTotal(def, memory - ret->size);
 
index 0501003e2ebd793201b6304afdf5fad7058c14a1..f07526f143fe6ebba4c7a7c6d4849a65e67d7a20 100644 (file)
@@ -7768,8 +7768,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef,
             return -1;
         }
 
-        if (vmdef->mem.cur_balloon == virDomainDefGetMemoryTotal(vmdef))
-            vmdef->mem.cur_balloon += dev->data.memory->size;
+        vmdef->mem.cur_balloon += dev->data.memory->size;
 
         if (virDomainMemoryInsert(vmdef, dev->data.memory) < 0)
             return -1;
@@ -7826,6 +7825,7 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
     virDomainControllerDefPtr cont, det_cont;
     virDomainChrDefPtr chr;
     virDomainFSDefPtr fs;
+    virDomainMemoryDefPtr mem;
     int idx;
 
     switch ((virDomainDeviceType) dev->type) {
@@ -7923,8 +7923,9 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
                            _("matching memory device was not found"));
             return -1;
         }
-
-        virDomainMemoryDefFree(virDomainMemoryRemove(vmdef, idx));
+        mem = virDomainMemoryRemove(vmdef, idx);
+        vmdef->mem.cur_balloon -= mem->size;
+        virDomainMemoryDefFree(mem);
         break;
 
     case VIR_DOMAIN_DEVICE_REDIRDEV: