return -1;
}
+ if (vmdef->mem.cur_balloon == virDomainDefGetMemoryActual(vmdef))
+ vmdef->mem.cur_balloon += dev->data.memory->size;
+
if (virDomainMemoryInsert(vmdef, dev->data.memory) < 0)
return -1;
dev->data.memory = NULL;
const char *backendType;
virJSONValuePtr props = NULL;
virObjectEventPtr event;
+ bool fix_balloon = false;
int id;
int ret = -1;
if (virAsprintf(&objalias, "mem%s", mem->info.alias) < 0)
goto cleanup;
+ if (vm->def->mem.cur_balloon == virDomainDefGetMemoryActual(vm->def))
+ fix_balloon = true;
+
if (!(devstr = qemuBuildMemoryDeviceStr(mem, vm->def, priv->qemuCaps)))
goto cleanup;
if (event)
qemuDomainEventQueue(driver, event);
+ /* fix the balloon size if it was set to maximum */
+ if (fix_balloon)
+ vm->def->mem.cur_balloon += mem->size;
+
/* mem is consumed by vm->def */
mem = NULL;
if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
goto error;
+ vm->def->mem.cur_balloon -= mem->size;
+
if ((idx = virDomainMemoryFindByDef(vm->def, mem)) >= 0)
virDomainMemoryRemove(vm->def, idx);