[libvirt] [PATCH 2/9] conf: Extract code filling data for virDomainGetVcpuPinInfo

John Ferlan jferlan at redhat.com
Fri Mar 4 12:30:01 UTC 2016



On 02/24/2016 09:22 AM, Peter Krempa wrote:
> The implementation of the inner guts of the function is similar for all
> drivers, so we can add a helper and not have to reimplement it three
> times.
> ---
>  src/conf/domain_conf.c   | 64 ++++++++++++++++++++++++++++++++++++++++++++++++
>  src/conf/domain_conf.h   |  8 ++++++
>  src/libvirt_private.syms |  1 +
>  src/libxl/libxl_driver.c | 38 +++-------------------------
>  src/qemu/qemu_driver.c   | 43 +++-----------------------------
>  src/test/test_driver.c   | 38 ++++------------------------
>  6 files changed, 84 insertions(+), 108 deletions(-)
> 

ACK with one nit...

One difference I noted, the 'libxl' code would:

    memset(cpumaps, 0x00, maplen * ncpumaps);

just before filling.  Should that be replicated in the common code?  If
not then for the libxl code should the lines be kept?


John

[...]

> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index 404016e..a99c99c 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -2423,8 +2423,7 @@ libxlDomainGetVcpuPinInfo(virDomainPtr dom, int ncpumaps,
>      libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver);
>      virDomainObjPtr vm = NULL;
>      virDomainDefPtr targetDef = NULL;
> -    int hostcpus, vcpu, ret = -1;
> -    virBitmapPtr allcpumap = NULL;
> +    int ret = -1;
> 
>      virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
>                    VIR_DOMAIN_AFFECT_CONFIG, -1);
> @@ -2445,41 +2444,10 @@ libxlDomainGetVcpuPinInfo(virDomainPtr dom, int ncpumaps,
>      /* Make sure coverity knows targetDef is valid at this point. */
>      sa_assert(targetDef);
> 
> -    /* Clamp to actual number of vcpus */
> -    if (ncpumaps > virDomainDefGetVcpus(targetDef))
> -        ncpumaps = virDomainDefGetVcpus(targetDef);
> -
> -    if ((hostcpus = libxl_get_max_cpus(cfg->ctx)) < 0)
> -        goto cleanup;
> -
> -    if (!(allcpumap = virBitmapNew(hostcpus)))
> -        goto cleanup;
> -
> -    virBitmapSetAll(allcpumap);
> -
> -    memset(cpumaps, 0x00, maplen * ncpumaps);

^^^^^

> -
> -    for (vcpu = 0; vcpu < ncpumaps; vcpu++) {
> -        virDomainVcpuInfoPtr vcpuinfo = virDomainDefGetVcpu(targetDef, vcpu);
> -        virBitmapPtr bitmap = NULL;
> -
> -        if (!vcpuinfo->online)
> -            continue;
> -
> -        if (vcpuinfo->cpumask)
> -            bitmap = vcpuinfo->cpumask;
> -        else if (targetDef->cpumask)
> -            bitmap = targetDef->cpumask;
> -        else
> -            bitmap = allcpumap;
> -
> -        virBitmapToDataBuf(bitmap, VIR_GET_CPUMAP(cpumaps, maplen, vcpu), maplen);
> -    }
> -
> -    ret = ncpumaps;
> +    ret = virDomainDefGetVcpuPinInfoHelper(targetDef, maplen, ncpumaps, cpumaps,
> +                                           libxl_get_max_cpus(cfg->ctx), NULL);
> 
>   cleanup:
> -    virBitmapFree(allcpumap);
>      if (vm)
>          virObjectUnlock(vm);
>      virObjectUnref(cfg);

[...]




More information about the libvir-list mailing list