Reuse the function so that we can get rid of a lot of temporary
allocations.
---
src/qemu/qemu_driver.c | 33 ++++++++++++---------------------
1 file changed, 12 insertions(+), 21 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index e34cb6c..f6107b7 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -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;
--
2.4.1