Signed-off-by: Maxim Nestratov <mnestratov(a)parallels.com>
---
src/parallels/parallels_driver.c | 4 +---
src/parallels/parallels_sdk.c | 31 ++++++++++++++++---------------
src/parallels/parallels_utils.h | 1 -
3 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c
index 650b790..09d1cca 100644
--- a/src/parallels/parallels_driver.c
+++ b/src/parallels/parallels_driver.c
@@ -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;
diff --git a/src/parallels/parallels_sdk.c b/src/parallels/parallels_sdk.c
index fec145d..5a3969e 100644
--- a/src/parallels/parallels_sdk.c
+++ b/src/parallels/parallels_sdk.c
@@ -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
diff --git a/src/parallels/parallels_utils.h b/src/parallels/parallels_utils.h
index ead5586..394548a 100644
--- a/src/parallels/parallels_utils.h
+++ b/src/parallels/parallels_utils.h
@@ -69,7 +69,6 @@ struct parallelsDomObj {
int id;
char *uuid;
char *home;
- virBitmapPtr cpumask;
PRL_HANDLE sdkdom;
};
--
1.7.1