[libvirt] [PATCH v2 05/11] qemuDomainDefPostParse: Fetch qemuCaps from domain object

Jiri Denemark jdenemar at redhat.com
Mon Sep 26 08:30:54 UTC 2016


On Fri, Sep 23, 2016 at 15:24:58 +0200, Michal Privoznik wrote:
> We can't rely on def->emulator path. It may be provided by user
> as we give them opportunity to provide their own XML for
> migration. Therefore the path may point to just whatever binary
> (or even to a non-existent file). Moreover, this path is meant
> for destination, but the capabilities lookup is done on source.
> What we can do is to assume same capabilities for post parse
> callbacks as the running domain has. They will be used just to
> add some default models/controllers/devices/... anyway.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/qemu/qemu_domain.c    | 16 ++++++++++------
>  src/qemu/qemu_migration.c |  2 +-
>  2 files changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 97f8993..ea88f5e 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -2327,11 +2327,11 @@ qemuDomainDefPostParse(virDomainDefPtr def,
>                         virCapsPtr caps,
>                         unsigned int parseFlags,
>                         void *opaque,
> -                       void *parseOpaque ATTRIBUTE_UNUSED)
> +                       void *parseOpaque)
>  {
>      virQEMUDriverPtr driver = opaque;
>      virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
> -    virQEMUCapsPtr qemuCaps = NULL;
> +    virQEMUCapsPtr qemuCaps = parseOpaque;
>      int ret = -1;
>  
>      if (def->os.bootloader || def->os.bootloaderArgs) {
> @@ -2360,10 +2360,14 @@ qemuDomainDefPostParse(virDomainDefPtr def,
>          !(def->emulator = virDomainDefGetDefaultEmulator(def, caps)))
>          goto cleanup;
>  
> -    if (!(qemuCaps = virQEMUCapsCacheLookup(caps,
> -                                            driver->qemuCapsCache,
> -                                            def->emulator)))
> -        goto cleanup;
> +    if (qemuCaps) {
> +        virObjectRef(qemuCaps);
> +    } else {
> +        if (!(qemuCaps = virQEMUCapsCacheLookup(caps,
> +                                                driver->qemuCapsCache,
> +                                                def->emulator)))
> +            goto cleanup;
> +    }

This could be simplified a bit as

    if (!virObjectRef(qemuCaps) &&
        !(qemuCaps = virQEMUCapsCacheLookup(caps,
                                            driver->qemuCapsCache,
                                            def->emulator)))
        goto cleanup;

But not a big deal.

ACK

Jirka




More information about the libvir-list mailing list