[libvirt] [PATCH] vz: fix building capabilities

Maxim Nestratov mnestratov at virtuozzo.com
Fri Jul 3 17:22:27 UTC 2015


03.07.2015 19:00, Dmitry Guryanov пишет:
> There should be at least one domain for each guest
> in cababilities. And in current code we don't add
> domain for this guest for example.
>
>      if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
>                                           VIR_ARCH_X86_64,
>                                           "vz",
>                                           NULL, 0, NULL)) == NULL)
>
> Anyway, with two virt types it looks a litte messy, so let's
> move adding guest and domain to a separate function.
> ---
>   src/vz/vz_driver.c |   92 +++++++++++++++++++++------------------------------
>   1 files changed, 38 insertions(+), 54 deletions(-)
>
> diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
> index 47c5023..a86ae28 100644
> --- a/src/vz/vz_driver.c
> +++ b/src/vz/vz_driver.c
> @@ -78,14 +78,45 @@ vzDriverUnlock(vzConnPtr driver)
>       virMutexUnlock(&driver->lock);
>   }
>   
> +static int
> +vzCapsAddGuestDomain(virCapsPtr caps,
> +                     virDomainOSType ostype,
> +                     virArch arch,
> +                     const char * emulator,
> +                     virDomainVirtType virt_type)
> +{
> +    virCapsGuestPtr guest;
> +
> +    if ((guest = virCapabilitiesAddGuest(caps, ostype, arch, emulator,
> +                                         NULL, 0, NULL)) == NULL)
> +        return -1;
> +
> +
> +    if (virCapabilitiesAddGuestDomain(guest, virt_type,
> +                                      NULL, NULL, 0, NULL) == NULL)
> +        return -1;
> +
> +    return 0;
> +}
> +
>   static virCapsPtr
>   vzBuildCapabilities(void)
>   {
>       virCapsPtr caps = NULL;
>       virCPUDefPtr cpu = NULL;
>       virCPUDataPtr data = NULL;
> -    virCapsGuestPtr guest;
>       virNodeInfo nodeinfo;
> +    virDomainOSType ostypes[] = {
> +        VIR_DOMAIN_OSTYPE_HVM,
> +        VIR_DOMAIN_OSTYPE_EXE
> +    };
> +    virArch archs[] = { VIR_ARCH_I686, VIR_ARCH_X86_64 };
> +    const char *const emulators[] = { "parallels", "vz" };
> +    virDomainVirtType virt_types[] = {
> +        VIR_DOMAIN_VIRT_PARALLELS,
> +        VIR_DOMAIN_VIRT_VZ
> +    };
> +    size_t i, j, k;
>   
>       if ((caps = virCapabilitiesNew(virArchFromHost(),
>                                      false, false)) == NULL)
> @@ -94,59 +125,12 @@ vzBuildCapabilities(void)
>       if (nodeCapsInitNUMA(caps) < 0)
>           goto error;
>   
> -    if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
> -                                         VIR_ARCH_X86_64,
> -                                         "parallels",
> -                                         NULL, 0, NULL)) == NULL)
> -        goto error;
> -
> -    if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
> -                                         VIR_ARCH_I686,
> -                                         "parallels",
> -                                         NULL, 0, NULL)) == NULL)
> -        goto error;
> -
> -
> -    if (virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_PARALLELS,
> -                                      NULL, NULL, 0, NULL) == NULL)
> -        goto error;
> -
> -    if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_EXE,
> -                                         VIR_ARCH_X86_64,
> -                                         "parallels",
> -                                         NULL, 0, NULL)) == NULL)
> -        goto error;
> -
> -    if (virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_PARALLELS,
> -                                      NULL, NULL, 0, NULL) == NULL)
> -        goto error;
> -
> -    if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
> -                                         VIR_ARCH_X86_64,
> -                                         "vz",
> -                                         NULL, 0, NULL)) == NULL)
> -        goto error;
> -
> -    if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_HVM,
> -                                         VIR_ARCH_I686,
> -                                         "vz",
> -                                         NULL, 0, NULL)) == NULL)
> -        goto error;
> -
> -
> -    if (virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_VZ,
> -                                      NULL, NULL, 0, NULL) == NULL)
> -        goto error;
> -
> -    if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_EXE,
> -                                         VIR_ARCH_X86_64,
> -                                         "vz",
> -                                         NULL, 0, NULL)) == NULL)
> -        goto error;
> -
> -    if (virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_VZ,
> -                                      NULL, NULL, 0, NULL) == NULL)
> -        goto error;
> +    for (i = 0; i < 1; i++)
> +        for (j = 0; j < 1; j++)
> +            for (k = 0; k < 1; k++)
> +                if (vzCapsAddGuestDomain(caps, ostypes[i], archs[j],
> +                                         emulators[k], virt_types[k]) < 0)
> +                    goto error;
>   
I guess here should be 2 instead of 1.

>       if (nodeGetInfo(&nodeinfo))
>           goto error;




More information about the libvir-list mailing list