On Mon, Nov 02, 2009 at 03:02:46PM -0500, Cole Robinson wrote: > > Signed-off-by: Cole Robinson <crobinso@xxxxxxxxxx> > --- > src/test/test_driver.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++- > 1 files changed, 89 insertions(+), 1 deletions(-) > > diff --git a/src/test/test_driver.c b/src/test/test_driver.c > index 078658f..5b871aa 100644 > --- a/src/test/test_driver.c > +++ b/src/test/test_driver.c > @@ -2005,6 +2005,94 @@ cleanup: > return ret; > } > > +static int testDomainGetVcpus(virDomainPtr domain, > + virVcpuInfoPtr info, > + int maxinfo, > + unsigned char *cpumaps, > + int maplen) > +{ > + testConnPtr privconn = domain->conn->privateData; > + testDomainObjPrivatePtr privdomdata; > + virDomainObjPtr privdom; > + int i, v, maxcpu, hostcpus; > + int ret = -1; > + struct timeval tv; > + unsigned long long statbase; > + > + testDriverLock(privconn); > + privdom = virDomainFindByName(&privconn->domains, domain->name); > + testDriverUnlock(privconn); > + > + if (privdom == NULL) { > + testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__); > + goto cleanup; > + } > + > + if (!virDomainIsActive(privdom)) { > + testError(domain->conn, VIR_ERR_OPERATION_INVALID, > + "%s",_("cannot list vcpus for an inactive domain")); > + goto cleanup; > + } > + > + privdomdata = privdom->privateData; > + > + if (gettimeofday(&tv, NULL) < 0) { > + virReportSystemError(domain->conn, errno, > + "%s", _("getting time of day")); > + goto cleanup; > + } > + > + statbase = (tv.tv_sec * 1000UL * 1000UL) + tv.tv_usec; > + > + > + hostcpus = VIR_NODEINFO_MAXCPUS(privconn->nodeInfo); > + maxcpu = maplen * 8; > + if (maxcpu > hostcpus) > + maxcpu = hostcpus; > + > + /* 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); > + > + for (i = 0 ; i < maxinfo ; i++) { > + virVcpuInfo privinfo = privdomdata->vcpu_infos[i]; > + > + info[i].number = privinfo.number; > + info[i].state = privinfo.state; > + info[i].cpu = privinfo.cpu; > + > + /* Fake an increasing cpu time value */ > + info[i].cpuTime = statbase / 10; > + } > + } > + > + /* Populate cpumaps */ > + if (cpumaps != NULL) { > + int privmaplen = VIR_CPU_MAPLEN(hostcpus); > + memset(cpumaps, 0, maplen * maxinfo); > + > + for (v = 0 ; v < maxinfo ; v++) { > + unsigned char *cpumap = VIR_GET_CPUMAP(cpumaps, maplen, v); > + > + for (i = 0 ; i < maxcpu ; i++) { > + if (VIR_CPU_USABLE(privdomdata->cpumaps, privmaplen, v, i)) { > + VIR_USE_CPU(cpumap, i); > + } > + } > + } > + } > + > + ret = maxinfo; > +cleanup: > + if (privdom) > + virDomainObjUnlock(privdom); > + return ret; > +} > + > static char *testDomainDumpXML(virDomainPtr domain, int flags) > { > testConnPtr privconn = domain->conn->privateData; > @@ -4860,7 +4948,7 @@ static virDriver testDriver = { > testDomainCoreDump, /* domainCoreDump */ > testSetVcpus, /* domainSetVcpus */ > NULL, /* domainPinVcpu */ > - NULL, /* domainGetVcpus */ > + testDomainGetVcpus, /* domainGetVcpus */ > testDomainGetMaxVcpus, /* domainGetMaxVcpus */ > NULL, /* domainGetSecurityLabel */ > NULL, /* nodeGetSecurityModel */ ACK Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list