qemu: Refactor qemuDomainHelperGetVcpus by reusing virBitmapToDataBuf

Get rid of the unnecessary allocation and copying of the bitmap and
clean up some unnecesary temporary variables.
This commit is contained in:
Peter Krempa 2015-05-29 14:01:32 +02:00
parent f79bfd9b51
commit 9f8196ace2

View File

@ -1416,7 +1416,7 @@ static int
qemuDomainHelperGetVcpus(virDomainObjPtr vm, virVcpuInfoPtr info, int maxinfo, qemuDomainHelperGetVcpus(virDomainObjPtr vm, virVcpuInfoPtr info, int maxinfo,
unsigned char *cpumaps, int maplen) unsigned char *cpumaps, int maplen)
{ {
int maxcpu, hostcpus; int hostcpus;
size_t i, v; size_t i, v;
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
@ -1429,10 +1429,6 @@ qemuDomainHelperGetVcpus(virDomainObjPtr vm, virVcpuInfoPtr info, int maxinfo,
return -1; return -1;
} }
maxcpu = maplen * 8;
if (maxcpu > hostcpus)
maxcpu = hostcpus;
/* Clamp to actual number of vcpus */ /* Clamp to actual number of vcpus */
if (maxinfo > priv->nvcpupids) if (maxinfo > priv->nvcpupids)
maxinfo = priv->nvcpupids; maxinfo = priv->nvcpupids;
@ -1457,25 +1453,15 @@ qemuDomainHelperGetVcpus(virDomainObjPtr vm, virVcpuInfoPtr info, int maxinfo,
} }
if (cpumaps != NULL) { if (cpumaps != NULL) {
memset(cpumaps, 0, maplen * maxinfo);
for (v = 0; v < maxinfo; v++) { for (v = 0; v < maxinfo; v++) {
unsigned char *cpumap = VIR_GET_CPUMAP(cpumaps, maplen, v); unsigned char *cpumap = VIR_GET_CPUMAP(cpumaps, maplen, v);
virBitmapPtr map = NULL; virBitmapPtr map = NULL;
unsigned char *tmpmap = NULL;
int tmpmapLen = 0;
if (virProcessGetAffinity(priv->vcpupids[v], if (virProcessGetAffinity(priv->vcpupids[v],
&map, maxcpu) < 0) &map, hostcpus) < 0)
return -1; return -1;
if (virBitmapToData(map, &tmpmap, &tmpmapLen) < 0) {
virBitmapFree(map);
return -1;
}
if (tmpmapLen > maplen)
tmpmapLen = maplen;
memcpy(cpumap, tmpmap, tmpmapLen);
VIR_FREE(tmpmap); virBitmapToDataBuf(map, cpumap, maplen);
virBitmapFree(map); virBitmapFree(map);
} }
} }