提交 b6d438e1 编写于 作者: P Peter Krempa

qemu: Use virBitmapToDataBuf in qemuDomainGetVcpuPinInfo

Reuse the function so that we can get rid of a lot of temporary
allocations.
上级 02a6c73f
......@@ -5291,8 +5291,8 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom,
virDomainDefPtr targetDef = NULL;
int ret = -1;
int hostcpus, vcpu;
unsigned char *cpumap;
virCapsPtr caps = NULL;
virBitmapPtr allcpumap = NULL;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG, -1);
......@@ -5319,6 +5319,11 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom,
if ((hostcpus = nodeGetCPUCount()) < 0)
goto cleanup;
if (!(allcpumap = virBitmapNew(hostcpus)))
goto cleanup;
virBitmapSetAll(allcpumap);
/* Clamp to actual number of vcpus */
if (ncpumaps > targetDef->vcpus)
ncpumaps = targetDef->vcpus;
......@@ -5329,37 +5334,23 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom,
for (vcpu = 0; vcpu < ncpumaps; vcpu++) {
virDomainPinDefPtr pininfo;
virBitmapPtr bitmap = NULL;
unsigned char *tmpmap = NULL;
int tmpmaplen;
pininfo = virDomainPinFind(targetDef->cputune.vcpupin,
targetDef->cputune.nvcpupin,
vcpu);
if (!pininfo) {
if (!(bitmap = virBitmapNew(hostcpus)))
goto cleanup;
virBitmapSetAll(bitmap);
} else {
if (pininfo && pininfo->cpumask)
bitmap = pininfo->cpumask;
}
else
bitmap = allcpumap;
if (virBitmapToData(bitmap, &tmpmap, &tmpmaplen) < 0) {
if (!pininfo)
virBitmapFree(bitmap);
goto cleanup;
}
if (tmpmaplen > maplen)
tmpmaplen = maplen;
cpumap = VIR_GET_CPUMAP(cpumaps, maplen, vcpu);
memcpy(cpumap, tmpmap, tmpmaplen);
if (!pininfo)
virBitmapFree(bitmap);
VIR_FREE(tmpmap);
virBitmapToDataBuf(bitmap, VIR_GET_CPUMAP(cpumaps, maplen, vcpu), maplen);
}
ret = ncpumaps;
cleanup:
virBitmapFree(allcpumap);
virDomainObjEndAPI(&vm);
virObjectUnref(caps);
return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册