[libvirt] [PATCH] vz: fix building capabilities

Dmitry Guryanov dguryanov at parallels.com
Fri Jul 3 17:27:19 UTC 2015


On 07/03/2015 08:22 PM, Maxim Nestratov wrote:
> 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.
>

Yes it is, thanks.

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




More information about the libvir-list mailing list