]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
parallels: cpumask support
authorMaxim Nestratov <mnestratov@parallels.com>
Tue, 10 Mar 2015 20:12:19 +0000 (23:12 +0300)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 11 Mar 2015 07:24:42 +0000 (08:24 +0100)
Signed-off-by: Maxim Nestratov <mnestratov@parallels.com>
src/parallels/parallels_driver.c
src/parallels/parallels_sdk.c
src/parallels/parallels_utils.h

index 650b79051e9665398ebbaa2c7a78fb7cafa6b6ad..09d1ccaa1d0bf0daad46efd5e14678c2a17049b7 100644 (file)
@@ -777,7 +777,6 @@ parallelsDomainGetVcpus(virDomainPtr domain,
                         int maplen)
 {
     parallelsConnPtr privconn = domain->conn->privateData;
-    parallelsDomObjPtr privdomdata = NULL;
     virDomainObjPtr privdom = NULL;
     size_t i;
     int v, maxcpu, hostcpus;
@@ -799,7 +798,6 @@ parallelsDomainGetVcpus(virDomainPtr domain,
         goto cleanup;
     }
 
-    privdomdata = privdom->privateData;
     if ((hostcpus = nodeGetCPUCount()) < 0)
         goto cleanup;
 
@@ -820,7 +818,7 @@ parallelsDomainGetVcpus(virDomainPtr domain,
             int tmpmapLen = 0;
 
             memset(cpumaps, 0, maplen * maxinfo);
-            virBitmapToData(privdomdata->cpumask, &tmpmap, &tmpmapLen);
+            virBitmapToData(privdom->def->cpumask, &tmpmap, &tmpmapLen);
             if (tmpmapLen > maplen)
                 tmpmapLen = maplen;
 
index fec145d1851a3218127e5a54b7377bf392cf0953..5a3969ea6a6ee46997dad52e9d3608fbcbe31fda 100644 (file)
@@ -412,7 +412,6 @@ prlsdkDomObjFreePrivate(void *p)
         return;
 
     PrlHandle_Free(pdom->sdkdom);
-    virBitmapFree(pdom->cpumask);
     VIR_FREE(pdom->uuid);
     VIR_FREE(pdom->home);
     VIR_FREE(p);
@@ -1053,8 +1052,7 @@ prlsdkConvertDomainState(VIRTUAL_MACHINE_STATE domainState,
 
 static int
 prlsdkConvertCpuInfo(PRL_HANDLE sdkdom,
-                     virDomainDefPtr def,
-                     parallelsDomObjPtr pdom)
+                     virDomainDefPtr def)
 {
     char *buf;
     PRL_UINT32 buflen = 0;
@@ -1085,11 +1083,11 @@ prlsdkConvertCpuInfo(PRL_HANDLE sdkdom,
     pret = PrlVmCfg_GetCpuMask(sdkdom, buf, &buflen);
 
     if (strlen(buf) == 0) {
-        if (!(pdom->cpumask = virBitmapNew(hostcpus)))
+        if (!(def->cpumask = virBitmapNew(hostcpus)))
             goto cleanup;
-        virBitmapSetAll(pdom->cpumask);
+        virBitmapSetAll(def->cpumask);
     } else {
-        if (virBitmapParse(buf, 0, &pdom->cpumask, hostcpus) < 0)
+        if (virBitmapParse(buf, 0, &def->cpumask, hostcpus) < 0)
             goto cleanup;
     }
 
@@ -1217,7 +1215,7 @@ prlsdkLoadDomain(parallelsConnPtr privconn,
                                          convert to Kbytes */
     def->mem.cur_balloon = def->mem.max_balloon;
 
-    if (prlsdkConvertCpuInfo(sdkdom, def, pdom) < 0)
+    if (prlsdkConvertCpuInfo(sdkdom, def) < 0)
         goto error;
 
     if (prlsdkConvertCpuMode(sdkdom, def) < 0)
@@ -1807,13 +1805,6 @@ prlsdkCheckUnsupportedParams(PRL_HANDLE sdkdom, virDomainDefPtr def)
         return -1;
     }
 
-    if (def->cpumask != NULL) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("changing cpu mask is not supported "
-                         "by parallels driver"));
-        return -1;
-    }
-
     if (def->cputune.shares ||
         def->cputune.sharesSpecified ||
         def->cputune.period ||
@@ -2842,6 +2833,7 @@ prlsdkDoApplyConfig(PRL_HANDLE sdkdom,
     size_t i;
     char uuidstr[VIR_UUID_STRING_BUFLEN + 2];
     bool needBoot = true;
+    char *mask = NULL;
 
     if (prlsdkCheckUnsupportedParams(sdkdom, def) < 0)
         return -1;
@@ -2869,6 +2861,13 @@ prlsdkDoApplyConfig(PRL_HANDLE sdkdom,
     pret = PrlVmCfg_SetCpuCount(sdkdom, def->vcpus);
     prlsdkCheckRetGoto(pret, error);
 
+    if (!(mask = virBitmapFormat(def->cpumask)))
+        goto error;
+
+    pret = PrlVmCfg_SetCpuMask(sdkdom, mask);
+    prlsdkCheckRetGoto(pret, error);
+    VIR_FREE(mask);
+
     if (prlsdkClearDevices(sdkdom) < 0)
         goto error;
 
@@ -2912,7 +2911,9 @@ prlsdkDoApplyConfig(PRL_HANDLE sdkdom,
     return 0;
 
  error:
-    return -1;
+    VIR_FREE(mask);
+
+   return -1;
 }
 
 int
index ead5586a680a357760ca19ca8ee7101ab6632911..394548ade539ec2b63ca0f49a76ed9121ed656cf 100644 (file)
@@ -69,7 +69,6 @@ struct parallelsDomObj {
     int id;
     char *uuid;
     char *home;
-    virBitmapPtr cpumask;
     PRL_HANDLE sdkdom;
 };