At 03/18/2011 10:45 AM, Taku Izumi Write:
This patch implements the code to address the new API
(virDomainSetMaxMemoryFlags) and virDomainSetMaxMemory API
in the qemu driver.
Signed-off-by: Taku Izumi <izumi.taku(a)jp.fujitsu.com>
---
src/qemu/qemu_driver.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 61 insertions(+), 2 deletions(-)
Index: libvirt/src/qemu/qemu_driver.c
===================================================================
--- libvirt.orig/src/qemu/qemu_driver.c
+++ libvirt/src/qemu/qemu_driver.c
@@ -1569,6 +1569,65 @@ cleanup:
return ret;
}
+static int qemudDomainSetMaxMemoryFlags(virDomainPtr dom, unsigned long memory,
+ unsigned int flags) {
+
+ struct qemud_driver *driver = dom->conn->privateData;
+ virDomainObjPtr vm = NULL;
+ virDomainDefPtr persistentDef = NULL;
+ int ret = -1;
+
+ virCheckFlags(VIR_DOMAIN_MEM_LIVE |
+ VIR_DOMAIN_MEM_CONFIG, -1);
+
+ if (flags & VIR_DOMAIN_MEM_LIVE) {
+ qemuReportError(VIR_ERR_OPERATION_INVALID,
+ _("cannot resize the maximum memory on active
domain"));
+ goto cleanup;
+ }
+
+ qemuDriverLock(driver);
+ vm = virDomainFindByUUID(&driver->domains, dom->uuid);
+ qemuDriverUnlock(driver);
+ if (!vm) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
Please use space instead of tab.
+ virUUIDFormat(dom->uuid, uuidstr);
+ qemuReportError(VIR_ERR_NO_DOMAIN,
+ _("no domain with matching uuid '%s'"),
uuidstr);
+ goto cleanup;
+ }
+
+ if (qemuDomainObjBeginJob(vm) < 0)
+ goto cleanup;
+
+ if (flags & VIR_DOMAIN_MEM_CONFIG) {
+ persistentDef = virDomainObjGetPersistentDef(driver->caps, vm);
+ if (!persistentDef)
+ goto endjob;
+
+ persistentDef->mem.max_balloon = memory;
+ if (persistentDef->mem.cur_balloon > memory)
+ persistentDef->mem.cur_balloon = memory;
+
+ ret = virDomainSaveConfig(driver->configDir, persistentDef);
+ goto endjob;
+ }
+
+endjob:
+ if (qemuDomainObjEndJob(vm) == 0)
+ vm = NULL;
+
+cleanup:
+ if (vm)
+ virDomainObjUnlock(vm);
+ return ret;
+
+}
+
+static int qemudDomainSetMaxMemory(virDomainPtr dom, unsigned long memory) {
+ return qemudDomainSetMaxMemoryFlags(dom, memory, VIR_DOMAIN_MEM_LIVE);
+}
+
static int qemudDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem,
unsigned int flags) {
struct qemud_driver *driver = dom->conn->privateData;
@@ -7044,8 +7103,8 @@ static virDriver qemuDriver = {
qemudDomainDestroy, /* domainDestroy */
qemudDomainGetOSType, /* domainGetOSType */
qemudDomainGetMaxMemory, /* domainGetMaxMemory */
- NULL, /* domainSetMaxMemory */
- NULL, /* domainSetMaxMemoryFlags */
+ qemudDomainSetMaxMemory, /* domainSetMaxMemory */
+ qemudDomainSetMaxMemoryFlags, /* domainSetMaxMemoryFlags */
qemudDomainSetMemory, /* domainSetMemory */
qemudDomainSetMemoryFlags, /* domainSetMemoryFlags */
qemuDomainSetMemoryParameters, /* domainSetMemoryParameters */
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list