On 06/24/2015 10:11 AM, Peter Krempa wrote: > Drop internal data structures and use the proper fields in virDomainDef. > > This allows to greatly simplify the code and allows to remove the > private data structure that was holding just redundant data. > > This patch also fixes the bogous output where we'd report that a fresh Another bogus typo > VM without vCPU pinning would not run on all vcpus. > --- > src/test/test_driver.c | 224 +++++++++++-------------------------------------- > 1 file changed, 49 insertions(+), 175 deletions(-) > > diff --git a/src/test/test_driver.c b/src/test/test_driver.c > index ae332ef..ed67dca 100644 > --- a/src/test/test_driver.c > +++ b/src/test/test_driver.c ... > @@ -2541,45 +2416,47 @@ static int testDomainGetVcpus(virDomainPtr domain, > > statbase = (tv.tv_sec * 1000UL * 1000UL) + tv.tv_usec; > > - > hostcpus = VIR_NODEINFO_MAXCPUS(privconn->nodeInfo); > maxcpu = maplen * 8; > if (maxcpu > hostcpus) > maxcpu = hostcpus; > > + if (!(allcpumap = virBitmapNew(hostcpus))) > + goto cleanup; > + > + virBitmapSetAll(allcpumap); > + > /* Clamp to actual number of vcpus */ > if (maxinfo > privdom->def->vcpus) > maxinfo = privdom->def->vcpus; > > - /* Populate virVcpuInfo structures */ > - if (info != NULL) { > - memset(info, 0, sizeof(*info) * maxinfo); > + memset(info, 0, sizeof(*info) * maxinfo); > + memset(cpumaps, 0, maxinfo * maplen); > > - for (i = 0; i < maxinfo; i++) { > - virVcpuInfo privinfo = privdomdata->vcpu_infos[i]; > + for (i = 0; i < maxinfo; i++) { > + virDomainPinDefPtr pininfo; > + virBitmapPtr bitmap = NULL; > > - info[i].number = privinfo.number; > - info[i].state = privinfo.state; > - info[i].cpu = privinfo.cpu; > + pininfo = virDomainPinFind(def->cputune.vcpupin, > + def->cputune.nvcpupin, > + i); > > - /* Fake an increasing cpu time value */ > - info[i].cpuTime = statbase / 10; > - } > - } > + if (pininfo && pininfo->cpumask) > + bitmap = pininfo->cpumask; > + else if (def->cpumask) > + bitmap = def->cpumask; > + else > + bitmap = allcpumap; > > - /* Populate cpumaps */ > - if (cpumaps != NULL) { > - int privmaplen = VIR_CPU_MAPLEN(hostcpus); > - memset(cpumaps, 0, maplen * maxinfo); > + if (cpumaps) > + virBitmapToDataBuf(bitmap, VIR_GET_CPUMAP(cpumaps, maplen, i), maplen); > > - for (v = 0; v < maxinfo; v++) { > - unsigned char *cpumap = VIR_GET_CPUMAP(cpumaps, maplen, v); > + info[i].number = i; > + info[i].state = VIR_VCPU_RUNNING; > + info[i].cpu = virBitmapLastSetBit(bitmap); > > - for (i = 0; i < maxcpu; i++) { > - if (VIR_CPU_USABLE(privdomdata->cpumaps, privmaplen, v, i)) > - VIR_USE_CPU(cpumap, i); > - } > - } > + /* Fake an increasing cpu time value */ > + info[i].cpuTime = statbase / 10; > } > > ret = maxinfo; ... Coverity determines that there's a need for virBitmapFree(allcpumap); John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list