From 95298e2380b414916719a9cdea1d8cde891cd6a7 Mon Sep 17 00:00:00 2001 From: Taku Izumi Date: Wed, 23 Mar 2011 14:48:24 +0900 Subject: [PATCH] setmem: add VIR_DOMAIN_MEM_CURRENT support to qemu This patch adds virDomainSetMemoryFlags(,,VIR_DOMAIN_MEM_CURRENT) support code to qemu driver. Also, change virDomainObjIsActive to return bool, given its usage. Signed-off-by: Taku Izumi --- src/conf/domain_conf.h | 2 +- src/qemu/qemu_driver.c | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 10e73cbc19..95bd11e806 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1172,7 +1172,7 @@ struct _virDomainObjList { virHashTable *objs; }; -static inline int +static inline bool virDomainObjIsActive(virDomainObjPtr dom) { return dom->def->id != -1; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index a84780b33d..6a0bf2422b 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1577,15 +1577,11 @@ static int qemudDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, virDomainObjPtr vm; virDomainDefPtr persistentDef = NULL; int ret = -1, r; + bool isActive; virCheckFlags(VIR_DOMAIN_MEM_LIVE | VIR_DOMAIN_MEM_CONFIG, -1); - if ((flags & (VIR_DOMAIN_MEM_LIVE | VIR_DOMAIN_MEM_CONFIG)) == 0) { - qemuReportError(VIR_ERR_INVALID_ARG, - _("invalid flag combination: (0x%x)"), flags); - } - qemuDriverLock(driver); vm = virDomainFindByUUID(&driver->domains, dom->uuid); qemuDriverUnlock(driver); @@ -1606,7 +1602,16 @@ static int qemudDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, if (qemuDomainObjBeginJob(vm) < 0) goto cleanup; - if (!virDomainObjIsActive(vm) && (flags & VIR_DOMAIN_MEM_LIVE)) { + isActive = virDomainObjIsActive(vm); + + if (flags == VIR_DOMAIN_MEM_CURRENT) { + if (isActive) + flags = VIR_DOMAIN_MEM_LIVE; + else + flags = VIR_DOMAIN_MEM_CONFIG; + } + + if (!isActive && (flags & VIR_DOMAIN_MEM_LIVE)) { qemuReportError(VIR_ERR_OPERATION_INVALID, "%s", _("domain is not running")); goto endjob;