]> xenbits.xensource.com Git - libvirt.git/commitdiff
vz: implement memory setting functions
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Fri, 8 Apr 2016 09:36:45 +0000 (12:36 +0300)
committerMaxim Nestratov <mnestratov@virtuozzo.com>
Mon, 11 Apr 2016 17:00:01 +0000 (20:00 +0300)
Quite straigthforward as vz sdk memory setting function makes
just what we want to that is set "amount of physical memory
allocated to a domain".

'useflags' is introduced for non flag function implementation.
We can't just use combination of flags like "live | config" or
we fail for inactive domains. Other combinations have drawbacks
too.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
src/vz/vz_driver.c
src/vz/vz_sdk.c
src/vz/vz_sdk.h

index 08447d93aa8f8df20c5aad1838c4d9e441cff110..b38b676682a571f3c9c6065c31d78939c40b63d1 100644 (file)
@@ -1479,6 +1479,40 @@ vzConnectUnregisterCloseCallback(virConnectPtr conn, virConnectCloseFunc cb)
     return ret;
 }
 
+static int vzDomainSetMemoryFlagsImpl(virDomainPtr domain, unsigned long memory,
+                                      unsigned int flags, bool useflags)
+{
+    virDomainObjPtr dom = NULL;
+    int ret = -1;
+
+    virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
+                  VIR_DOMAIN_AFFECT_CONFIG, -1);
+
+    if (!(dom = vzDomObjFromDomain(domain)))
+        return -1;
+
+    if (useflags && vzCheckConfigUpdateFlags(dom, &flags) < 0)
+        goto cleanup;
+
+    ret = prlsdkSetMemsize(dom, memory >> 10);
+
+ cleanup:
+
+    virObjectUnlock(dom);
+    return ret;
+}
+
+static int vzDomainSetMemoryFlags(virDomainPtr domain, unsigned long memory,
+                                  unsigned int flags)
+{
+    return vzDomainSetMemoryFlagsImpl(domain, memory, flags, true);
+}
+
+static int vzDomainSetMemory(virDomainPtr domain, unsigned long memory)
+{
+    return vzDomainSetMemoryFlagsImpl(domain, memory, 0, false);
+}
+
 static virHypervisorDriver vzDriver = {
     .name = "vz",
     .connectOpen = vzConnectOpen,            /* 0.10.0 */
@@ -1543,6 +1577,8 @@ static virHypervisorDriver vzDriver = {
     .domainMemoryStats = vzDomainMemoryStats, /* 1.2.17 */
     .connectRegisterCloseCallback = vzConnectRegisterCloseCallback, /* 1.3.2 */
     .connectUnregisterCloseCallback = vzConnectUnregisterCloseCallback, /* 1.3.2 */
+    .domainSetMemoryFlags = vzDomainSetMemoryFlags, /* 1.3.4 */
+    .domainSetMemory = vzDomainSetMemory, /* 1.3.4 */
 };
 
 static virConnectDriver vzConnectDriver = {
index c0065174a518fffb6bfe87c23eedeb9183e9902d..85ea0d7a984df8fdd12c1867e547cc557f05fad7 100644 (file)
@@ -4302,3 +4302,27 @@ prlsdkGetMemoryStats(virDomainObjPtr dom,
 
     return ret;
 }
+
+/* memsize is in MiB */
+int prlsdkSetMemsize(virDomainObjPtr dom, unsigned int memsize)
+{
+    vzDomObjPtr privdom = dom->privateData;
+    PRL_HANDLE job;
+    PRL_RESULT pret;
+
+    job = PrlVm_BeginEdit(privdom->sdkdom);
+    if (PRL_FAILED(waitJob(job)))
+        goto error;
+
+    pret = PrlVmCfg_SetRamSize(privdom->sdkdom, memsize);
+    prlsdkCheckRetGoto(pret, error);
+
+    job = PrlVm_CommitEx(privdom->sdkdom, 0);
+    if (PRL_FAILED(waitJob(job)))
+        goto error;
+
+    return 0;
+
+ error:
+    return -1;
+}
index 2f11d4f4e0072c452b915eb24e35e1ec0ebfb18f..46218684e946d096b25c0a6508ff4e60c77e2ea7 100644 (file)
@@ -80,3 +80,5 @@ int
 prlsdkGetMemoryStats(virDomainObjPtr dom, virDomainMemoryStatPtr stats, unsigned int nr_stats);
 void
 prlsdkDomObjFreePrivate(void *p);
+/* memsize is in MiB */
+int prlsdkSetMemsize(virDomainObjPtr dom, unsigned int memsize);