[libvirt] [PATCH 2/4] qemu: Assign device addresses in PostParse

Andrea Bolognani abologna at redhat.com
Tue May 17 14:39:24 UTC 2016


On Sat, 2016-05-14 at 16:00 -0400, Cole Robinson wrote:
> This wires up qemuDomainAssignAddresses into the new
> virDomainDefAssignAddressesCallback, so it's always triggered
> via virDomainDefPostParse. We are essentially doing this already
> with open coded calls sprinkled about

Missing period.

> qemu argv parse output changes slightly since previously it wasn't
> hitting qemuDomainAssignAddresses.
> ---
>  src/qemu/qemu_domain.c                             | 25 ++++++++++++++++++++++
>  .../qemuargv2xmldata/qemuargv2xml-pseries-disk.xml |  4 +++-
>  tests/qemuxml2argvtest.c                           |  2 +-
>  tests/qemuxml2xmltest.c                            | 11 ++--------
>  4 files changed, 31 insertions(+), 11 deletions(-)
> 
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index b0eb3b6..50505a6 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -2293,9 +2293,34 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
>  }
>  
>  
> +static int
> +qemuDomainDefAssignAddressesCallback(virDomainDef *def,
> +                                     virCapsPtr caps ATTRIBUTE_UNUSED,
> +                                     unsigned int parseFlags ATTRIBUTE_UNUSED,

So these two arguments are unused, and they remain unused by
the end of the series... I guess you wanted to have the same
signature as virDomainDefPostParseCallback()?

Not sure if it's worth keeping them around, but I guess it's
not a big deal either way.

> +                                     void *opaque)
> +{
> +    virQEMUDriverPtr driver = opaque;
> +    virQEMUCapsPtr qemuCaps = NULL;
> +    int ret = -1;
> +
> +    if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache,
> +                                            def->emulator)))
> +        goto cleanup;
> +
> +    if (qemuDomainAssignAddresses(def, qemuCaps, NULL) < 0)
> +        goto cleanup;
> +
> +    ret = 0;
> + cleanup:
> +    virObjectUnref(qemuCaps);
> +    return ret;
> +}
> +
> +
>  virDomainDefParserConfig virQEMUDriverDomainDefParserConfig = {
>      .devicesPostParseCallback = qemuDomainDeviceDefPostParse,
>      .domainPostParseCallback = qemuDomainDefPostParse,
> +    .assignAddressesCallback = qemuDomainDefAssignAddressesCallback,

I'd say call it qemuDomainDefAssignAddresses for consistency's
sake.

>      .features = VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG |
>                  VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN
>  };
> diff --git a/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml b/tests/qemuargv2xmldata/qemuargv2xml-pseries-
> disk.xml
> index 8cec27c..ab9195a 100644
> --- a/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
> +++ b/tests/qemuargv2xmldata/qemuargv2xml-pseries-disk.xml
> @@ -29,7 +29,9 @@
>      </disk>
>      <controller type='usb' index='0'/>
>      <controller type='pci' index='0' model='pci-root'/>
> -    <controller type='scsi' index='0'/>
> +    <controller type='scsi' index='0'>
> +      <address type='spapr-vio' reg='0x2000'/>
> +    </controller>
>      <input type='keyboard' bus='usb'/>
>      <input type='mouse' bus='usb'/>
>      <graphics type='sdl'/>
> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
> index d1cfbec..840efc9 100644
> --- a/tests/qemuxml2argvtest.c
> +++ b/tests/qemuxml2argvtest.c
> @@ -1382,7 +1382,7 @@ mymain(void)
>              QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
>      DO_TEST("pseries-vio-user-assigned",
>              QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
> -    DO_TEST_FAILURE("pseries-vio-address-clash",
> +    DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
>              QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
>      DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
>      DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
> index 5a43fa9..9eb2625 100644
> --- a/tests/qemuxml2xmltest.c
> +++ b/tests/qemuxml2xmltest.c
> @@ -37,13 +37,9 @@ struct testInfo {
>  };
>  
>  static int
> -qemuXML2XMLPreFormatCallback(virDomainDefPtr def, const void *opaque)
> +qemuXML2XMLPreFormatCallback(virDomainDefPtr def ATTRIBUTE_UNUSED,
> +                             const void *opaque ATTRIBUTE_UNUSED)
>  {
> -    const struct testInfo *info = opaque;
> -
> -    if (qemuDomainAssignAddresses(def, info->qemuCaps, NULL))
> -        return -1;
> -
>      return 0;
>  }

If you're going to remove the whole function body, why not go
the extra mile? Get rid of the function altogether and just
pass NULL to testCompareDomXML2XMLFiles().

> @@ -153,9 +149,6 @@ testCompareStatusXMLToXMLFiles(const void *opaque)
>          goto cleanup;
>      }
>  
> -    if (qemuDomainAssignAddresses(obj->def, data->qemuCaps, NULL))
> -        goto cleanup;
> -
>      /* format it back */
>      if (!(actual = virDomainObjFormat(driver.xmlopt, obj, NULL,
>                                        VIR_DOMAIN_DEF_FORMAT_SECURE))) {

ACK

-- 
Andrea Bolognani
Software Engineer - Virtualization Team




More information about the libvir-list mailing list