[libvirt] [PATCH 5/6] test: Implement virDomainGetVcpus

Daniel P. Berrange berrange at redhat.com
Tue Nov 3 20:59:59 UTC 2009


On Mon, Nov 02, 2009 at 03:02:46PM -0500, Cole Robinson wrote:
> 
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
>  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 :|




More information about the libvir-list mailing list