[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