From nobody Sun Feb 8 19:24:54 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1565274524; cv=none; d=zoho.com; s=zohoarc; b=LlixZPrOZRri8bm/zYjQkmPYTuD6j0Q+N2tMdowLr5R6CDR2jgQ3E6xZPSayTtJo3r1PeD/H7tkdSbhLETDMoX+1WuYn+x4ZKIWkU8KRVl049x3rg0J72WhgxK1oQW+IXufvYcv7wApudKrtg+uJNbZRmFfvbiMxsOSKTR6Q39c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1565274524; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=CcUlABO3MQh2fjog4ybrB4feTUcYiIcTh9kok7XdNiU=; b=TOA2DWSuXTSjYdQllqr85VPqQ0UBIzymuBCXRi5f/c0SI39Sdw9EYNh3GeIizXeKG7yCU2Nz/Kr+TgLCyvoxo8cjEZxP/DZONPI+zaGNdOt+QaQFiZnPoif0QqVdjfswaw0QH9hoVIJnzgZ2NiBDoU4nHY4xVCgMKK/VmrzIbUA= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1565274524092452.0348015913205; Thu, 8 Aug 2019 07:28:44 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A7F013174640; Thu, 8 Aug 2019 14:28:42 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 817335D772; Thu, 8 Aug 2019 14:28:42 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 44E8783544; Thu, 8 Aug 2019 14:28:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x78EQtq0017769 for ; Thu, 8 Aug 2019 10:26:55 -0400 Received: by smtp.corp.redhat.com (Postfix) id DD749608AB; Thu, 8 Aug 2019 14:26:55 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.188]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 67D0960A9D for ; Thu, 8 Aug 2019 14:26:51 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 493FA102519; Thu, 8 Aug 2019 16:26:47 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Thu, 8 Aug 2019 16:26:41 +0200 Message-Id: <3f16be8e3083938d1b1e146e150fb795f49145bd.1565271790.git.jdenemar@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 07/10] qemu: Pass correct qemuCaps to virDomainDefCopy X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.41]); Thu, 08 Aug 2019 14:28:43 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Since qemuDomainDefPostParse callback requires qemuCaps, we need to make sure it gets the capabilities stored in the domain's private data if the domain is running. Passing NULL may cause QEMU capabilities probing to be triggered in case QEMU binary changed in the meantime. When this happens while a running domain object is locked, QMP event delivered to the domain before QEMU capabilities probing finishes will deadlock the event loop. Several general functions from domain_conf.c were lazily passing NULL as the parseOpaque pointer instead of letting their callers pass the right data. This patch fixes all paths leading to virDomainDefCopy to do the right thing. Signed-off-by: Jiri Denemark --- src/conf/domain_conf.c | 18 +++++++++++------- src/conf/domain_conf.h | 9 ++++++--- src/libxl/libxl_domain.c | 2 +- src/libxl/libxl_driver.c | 10 +++++----- src/libxl/libxl_migration.c | 2 +- src/lxc/lxc_driver.c | 8 ++++---- src/lxc/lxc_process.c | 2 +- src/qemu/qemu_driver.c | 29 +++++++++++++++++++++-------- src/qemu/qemu_migration.c | 4 +++- src/qemu/qemu_process.c | 2 +- src/test/test_driver.c | 2 +- tests/qemuhotplugtest.c | 2 +- 12 files changed, 56 insertions(+), 34 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0456369d55..c44ceba7d5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -3674,7 +3674,8 @@ virDomainObjWaitUntil(virDomainObjPtr vm, int virDomainObjSetDefTransient(virCapsPtr caps, virDomainXMLOptionPtr xmlopt, - virDomainObjPtr domain) + virDomainObjPtr domain, + void *parseOpaque) { int ret =3D -1; =20 @@ -3684,7 +3685,8 @@ virDomainObjSetDefTransient(virCapsPtr caps, if (domain->newDef) return 0; =20 - if (!(domain->newDef =3D virDomainDefCopy(domain->def, caps, xmlopt, N= ULL, false))) + if (!(domain->newDef =3D virDomainDefCopy(domain->def, caps, xmlopt, + parseOpaque, false))) goto out; =20 ret =3D 0; @@ -3723,10 +3725,11 @@ virDomainObjRemoveTransientDef(virDomainObjPtr doma= in) virDomainDefPtr virDomainObjGetPersistentDef(virCapsPtr caps, virDomainXMLOptionPtr xmlopt, - virDomainObjPtr domain) + virDomainObjPtr domain, + void *parseOpaque) { if (virDomainObjIsActive(domain) && - virDomainObjSetDefTransient(caps, xmlopt, domain) < 0) + virDomainObjSetDefTransient(caps, xmlopt, domain, parseOpaque) < 0) return NULL; =20 if (domain->newDef) @@ -29341,12 +29344,13 @@ virDomainDefCopy(virDomainDefPtr src, virDomainDefPtr virDomainObjCopyPersistentDef(virDomainObjPtr dom, virCapsPtr caps, - virDomainXMLOptionPtr xmlopt) + virDomainXMLOptionPtr xmlopt, + void *parseOpaque) { virDomainDefPtr cur; =20 - cur =3D virDomainObjGetPersistentDef(caps, xmlopt, dom); - return virDomainDefCopy(cur, caps, xmlopt, NULL, false); + cur =3D virDomainObjGetPersistentDef(caps, xmlopt, dom, parseOpaque); + return virDomainDefCopy(cur, caps, xmlopt, parseOpaque, false); } =20 =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 57ca2a8ad1..7b9732fbbc 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2902,12 +2902,14 @@ void virDomainObjAssignDef(virDomainObjPtr domain, virDomainDefPtr *oldDef); int virDomainObjSetDefTransient(virCapsPtr caps, virDomainXMLOptionPtr xmlopt, - virDomainObjPtr domain); + virDomainObjPtr domain, + void *parseOpaque); void virDomainObjRemoveTransientDef(virDomainObjPtr domain); virDomainDefPtr virDomainObjGetPersistentDef(virCapsPtr caps, virDomainXMLOptionPtr xmlopt, - virDomainObjPtr domain); + virDomainObjPtr domain, + void *parseOpaque); =20 int virDomainObjUpdateModificationImpact(virDomainObjPtr vm, unsigned int *flags); @@ -2928,7 +2930,8 @@ virDomainDefPtr virDomainDefCopy(virDomainDefPtr src, bool migratable); virDomainDefPtr virDomainObjCopyPersistentDef(virDomainObjPtr dom, virCapsPtr caps, - virDomainXMLOptionPtr xmlopt= ); + virDomainXMLOptionPtr xmlopt, + void *parseOpaque); =20 typedef enum { /* parse internal domain status information */ diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 2d8569e592..b60511a266 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -1340,7 +1340,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, VIR_FREE(managed_save_path); } =20 - if (virDomainObjSetDefTransient(cfg->caps, driver->xmlopt, vm) < 0) + if (virDomainObjSetDefTransient(cfg->caps, driver->xmlopt, vm, NULL) <= 0) goto cleanup; =20 /* Run an early hook to set-up missing devices */ diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index f430522b35..0e1bf2f0bb 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -1607,7 +1607,7 @@ virDomainLiveConfigHelperMethod(virCapsPtr caps, return -1; =20 if (*flags & VIR_DOMAIN_AFFECT_CONFIG) { - if (!(*persistentDef =3D virDomainObjGetPersistentDef(caps, xmlopt= , dom))) { + if (!(*persistentDef =3D virDomainObjGetPersistentDef(caps, xmlopt= , dom, NULL))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Get persistent config failed")); return -1; @@ -2294,7 +2294,7 @@ libxlDomainSetVcpusFlags(virDomainPtr dom, unsigned i= nt nvcpus, goto endjob; } =20 - if (!(def =3D virDomainObjGetPersistentDef(cfg->caps, driver->xmlopt, = vm))) + if (!(def =3D virDomainObjGetPersistentDef(cfg->caps, driver->xmlopt, = vm, NULL))) goto endjob; =20 maplen =3D VIR_CPU_MAPLEN(nvcpus); @@ -4126,7 +4126,7 @@ libxlDomainAttachDeviceFlags(virDomainPtr dom, const = char *xml, =20 /* Make a copy for updated domain. */ if (!(vmdef =3D virDomainObjCopyPersistentDef(vm, cfg->caps, - driver->xmlopt))) + driver->xmlopt, NULL))) goto endjob; =20 if (libxlDomainAttachDeviceConfig(vmdef, dev) < 0) @@ -4216,7 +4216,7 @@ libxlDomainDetachDeviceFlags(virDomainPtr dom, const = char *xml, =20 /* Make a copy for updated domain. */ if (!(vmdef =3D virDomainObjCopyPersistentDef(vm, cfg->caps, - driver->xmlopt))) + driver->xmlopt, NULL))) goto endjob; =20 if (libxlDomainDetachDeviceConfig(vmdef, dev) < 0) @@ -4303,7 +4303,7 @@ libxlDomainUpdateDeviceFlags(virDomainPtr dom, const = char *xml, =20 /* Make a copy for updated domain. */ if (!(vmdef =3D virDomainObjCopyPersistentDef(vm, cfg->caps, - driver->xmlopt))) + driver->xmlopt, NULL))) goto cleanup; =20 if ((ret =3D libxlDomainUpdateDeviceConfig(vmdef, dev)) < 0) diff --git a/src/libxl/libxl_migration.c b/src/libxl/libxl_migration.c index 76bcb66a11..a1021d499b 100644 --- a/src/libxl/libxl_migration.c +++ b/src/libxl/libxl_migration.c @@ -1343,7 +1343,7 @@ libxlDomainMigrationDstFinish(virConnectPtr dconn, =20 vm->persistent =3D 1; if (!(vmdef =3D virDomainObjGetPersistentDef(cfg->caps, - driver->xmlopt, vm))) + driver->xmlopt, vm, NUL= L))) goto cleanup; =20 if (virDomainSaveConfig(cfg->configDir, cfg->caps, vmdef) < 0) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index d0b6703101..a2180b197e 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -1913,7 +1913,7 @@ lxcDomainSetSchedulerParametersFlags(virDomainPtr dom, =20 if (persistentDef) { /* Make a copy for updated domain. */ - persistentDefCopy =3D virDomainObjCopyPersistentDef(vm, caps, driv= er->xmlopt); + persistentDefCopy =3D virDomainObjCopyPersistentDef(vm, caps, driv= er->xmlopt, NULL); if (!persistentDefCopy) goto endjob; } @@ -4735,7 +4735,7 @@ static int lxcDomainAttachDeviceFlags(virDomainPtr do= m, =20 if (flags & VIR_DOMAIN_AFFECT_CONFIG) { /* Make a copy for updated domain. */ - vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); + vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt, = NULL); if (!vmdef) goto endjob; =20 @@ -4840,7 +4840,7 @@ static int lxcDomainUpdateDeviceFlags(virDomainPtr do= m, goto endjob; =20 /* Make a copy for updated domain. */ - if (!(vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt= ))) + if (!(vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt= , NULL))) goto endjob; =20 /* virDomainDefCompatibleDevice call is delayed until we know the @@ -4919,7 +4919,7 @@ static int lxcDomainDetachDeviceFlags(virDomainPtr do= m, =20 if (flags & VIR_DOMAIN_AFFECT_CONFIG) { /* Make a copy for updated domain. */ - vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); + vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt, = NULL); if (!vmdef) goto endjob; =20 diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index a1d028b2e6..3d03086ea7 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -1289,7 +1289,7 @@ int virLXCProcessStart(virConnectPtr conn, * report implicit runtime defaults in the XML, like vnc listen/socket */ VIR_DEBUG("Setting current domain def as transient"); - if (virDomainObjSetDefTransient(caps, driver->xmlopt, vm) < 0) + if (virDomainObjSetDefTransient(caps, driver->xmlopt, vm, NULL) < 0) goto cleanup; =20 /* Run an early hook to set-up missing devices */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 3004433aa5..f6e9c8672d 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -8826,6 +8826,7 @@ qemuDomainAttachDeviceLiveAndConfig(virDomainObjPtr v= m, const char *xml, unsigned int flags) { + qemuDomainObjPrivatePtr priv =3D vm->privateData; virDomainDefPtr vmdef =3D NULL; virQEMUDriverConfigPtr cfg =3D NULL; virDomainDeviceDefPtr devConf =3D NULL; @@ -8847,7 +8848,8 @@ qemuDomainAttachDeviceLiveAndConfig(virDomainObjPtr v= m, * rely on the correct vm->def or vm->newDef being passed, so call the * device parse based on which definition is in use */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); + vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt, + priv->qemuCaps); if (!vmdef) goto cleanup; =20 @@ -8965,6 +8967,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr d= om, { virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm =3D NULL; + qemuDomainObjPrivatePtr priv; virDomainDefPtr vmdef =3D NULL; virDomainDeviceDefPtr dev =3D NULL, dev_copy =3D NULL; bool force =3D (flags & VIR_DOMAIN_DEVICE_MODIFY_FORCE) !=3D 0; @@ -8987,6 +8990,8 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr d= om, if (!(vm =3D qemuDomObjFromDomain(dom))) goto cleanup; =20 + priv =3D vm->privateData; + if (virDomainUpdateDeviceFlagsEnsureACL(dom->conn, vm->def, flags) < 0) goto cleanup; =20 @@ -9019,7 +9024,8 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr d= om, =20 if (flags & VIR_DOMAIN_AFFECT_CONFIG) { /* Make a copy for updated domain. */ - vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); + vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt, + priv->qemuCaps); if (!vmdef) goto endjob; =20 @@ -9077,6 +9083,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr = driver, const char *xml, unsigned int flags) { + qemuDomainObjPrivatePtr priv =3D vm->privateData; virCapsPtr caps =3D NULL; virQEMUDriverConfigPtr cfg =3D NULL; virDomainDeviceDefPtr dev =3D NULL, dev_copy =3D NULL; @@ -9115,7 +9122,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr = driver, =20 if (flags & VIR_DOMAIN_AFFECT_CONFIG) { /* Make a copy for updated domain. */ - vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt); + vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt, = priv->qemuCaps); if (!vmdef) goto cleanup; =20 @@ -9171,6 +9178,7 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDrive= rPtr driver, const char *alias, unsigned int flags) { + qemuDomainObjPrivatePtr priv =3D vm->privateData; virCapsPtr caps =3D NULL; virQEMUDriverConfigPtr cfg =3D NULL; virDomainDefPtr def =3D NULL; @@ -9197,7 +9205,8 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDrive= rPtr driver, if (persistentDef) { virDomainDeviceDef dev; =20 - if (!(vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xm= lopt))) + if (!(vmdef =3D virDomainObjCopyPersistentDef(vm, caps, driver->xm= lopt, + priv->qemuCaps))) goto cleanup; =20 if (virDomainDefFindDevice(vmdef, alias, &dev, true) < 0) @@ -10810,7 +10819,8 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr = dom, if (persistentDef) { /* Make a copy for updated domain. */ if (!(persistentDefCopy =3D virDomainObjCopyPersistentDef(vm, caps, - driver->xm= lopt))) + driver->xm= lopt, + priv->qemu= Caps))) goto endjob; } =20 @@ -16477,6 +16487,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr sna= pshot, if (!(vm =3D qemuDomObjFromSnapshot(snapshot))) goto cleanup; =20 + priv =3D vm->privateData; cfg =3D virQEMUDriverGetConfig(driver); =20 if (virDomainRevertToSnapshotEnsureACL(snapshot->domain->conn, vm->def= ) < 0) @@ -16553,7 +16564,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr sna= pshot, * than inactive xml? */ if (snap->def->dom) { config =3D virDomainDefCopy(snap->def->dom, caps, - driver->xmlopt, NULL, true); + driver->xmlopt, priv->qemuCaps, true); if (!config) goto endjob; } @@ -16563,7 +16574,6 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr sna= pshot, switch ((virDomainSnapshotState) snapdef->state) { case VIR_DOMAIN_SNAPSHOT_RUNNING: case VIR_DOMAIN_SNAPSHOT_PAUSED: - priv =3D vm->privateData; start_flags |=3D VIR_QEMU_PROCESS_START_PAUSED; =20 /* Transitions 2, 3, 5, 6, 8, 9 */ @@ -22016,6 +22026,7 @@ qemuDomainGetFSInfo(virDomainPtr dom, unsigned int flags) { virQEMUDriverPtr driver =3D dom->conn->privateData; + qemuDomainObjPrivatePtr priv; virDomainObjPtr vm; qemuAgentPtr agent; virCapsPtr caps =3D NULL; @@ -22027,6 +22038,8 @@ qemuDomainGetFSInfo(virDomainPtr dom, if (!(vm =3D qemuDomObjFromDomain(dom))) return ret; =20 + priv =3D vm->privateData; + if (virDomainGetFSInfoEnsureACL(dom->conn, vm->def) < 0) goto cleanup; =20 @@ -22042,7 +22055,7 @@ qemuDomainGetFSInfo(virDomainPtr dom, if (!(caps =3D virQEMUDriverGetCapabilities(driver, false))) goto endjob; =20 - if (!(def =3D virDomainDefCopy(vm->def, caps, driver->xmlopt, NULL, fa= lse))) + if (!(def =3D virDomainDefCopy(vm->def, caps, driver->xmlopt, priv->qe= muCaps, false))) goto endjob; =20 agent =3D qemuDomainObjEnterAgent(vm); diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index d07482d9f2..c2570f7303 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -4853,6 +4853,7 @@ qemuMigrationDstPersist(virQEMUDriverPtr driver, bool ignoreSaveError) { virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + qemuDomainObjPrivatePtr priv =3D vm->privateData; virCapsPtr caps =3D NULL; virDomainDefPtr vmdef; virDomainDefPtr oldDef =3D NULL; @@ -4867,7 +4868,8 @@ qemuMigrationDstPersist(virQEMUDriverPtr driver, oldDef =3D vm->newDef; vm->newDef =3D qemuMigrationCookieGetPersistent(mig); =20 - if (!(vmdef =3D virDomainObjGetPersistentDef(caps, driver->xmlopt, vm)= )) + if (!(vmdef =3D virDomainObjGetPersistentDef(caps, driver->xmlopt, vm, + priv->qemuCaps))) goto error; =20 if (virDomainSaveConfig(cfg->configDir, driver->caps, vmdef) < 0 && diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 9345ecf1be..ffe4338854 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5637,7 +5637,7 @@ qemuProcessInit(virQEMUDriverPtr driver, * report implicit runtime defaults in the XML, like vnc listen/socket */ VIR_DEBUG("Setting current domain def as transient"); - if (virDomainObjSetDefTransient(caps, driver->xmlopt, vm) < 0) + if (virDomainObjSetDefTransient(caps, driver->xmlopt, vm, priv->qemuCa= ps) < 0) goto cleanup; =20 /* Update qemu capabilities according to lists passed in via namespace= */ diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 6f18baa265..85cfcce79f 100755 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -713,7 +713,7 @@ testDomainStartState(testDriverPtr privconn, =20 if (virDomainObjSetDefTransient(privconn->caps, privconn->xmlopt, - dom) < 0) { + dom, NULL) < 0) { goto cleanup; } =20 diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index 354068d748..016a3ed4b1 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -427,7 +427,7 @@ testQemuHotplugCpuPrepare(const char *test, =20 /* create vm->newDef */ data->vm->persistent =3D true; - if (virDomainObjSetDefTransient(caps, driver.xmlopt, data->vm) < 0) + if (virDomainObjSetDefTransient(caps, driver.xmlopt, data->vm, NULL) <= 0) goto error; =20 priv =3D data->vm->privateData; --=20 2.22.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list