From nobody Tue Apr 30 02:40:14 2024 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 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 150600866571923.027348292684906; Thu, 21 Sep 2017 08:44:25 -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 B5E6C3680B; Thu, 21 Sep 2017 15:44:23 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6496A5EE06; Thu, 21 Sep 2017 15:44:23 +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 63D521855945; Thu, 21 Sep 2017 15:44:22 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v8LEla9D014670 for ; Thu, 21 Sep 2017 10:47:36 -0400 Received: by smtp.corp.redhat.com (Postfix) id BD5CC6031A; Thu, 21 Sep 2017 14:47:36 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 43E6660481 for ; Thu, 21 Sep 2017 14:47:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B5E6C3680B Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 21 Sep 2017 16:47:05 +0200 Message-Id: <689041dd4bc11e730ec6979b0ea0497e14b9519a.1506005021.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v1 1/7] qemu_command: Drop useless alias checks 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: , MIME-Version: 1.0 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.30]); Thu, 21 Sep 2017 15:44:24 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" At the point when we are building the command line all aliases are assigned. There's no point in checking. Signed-off-by: Michal Privoznik --- src/qemu/qemu_command.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index abeb24846..47ece35f6 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3526,12 +3526,6 @@ qemuBuildMemoryDimmBackendStr(virDomainMemoryDefPtr = mem, const char *backendType; char *ret =3D NULL; =20 - if (!mem->info.alias) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("memory device alias is not assigned")); - return NULL; - } - if (virAsprintf(&alias, "mem%s", mem->info.alias) < 0) goto cleanup; =20 @@ -3555,12 +3549,6 @@ qemuBuildMemoryDeviceStr(virDomainMemoryDefPtr mem) virBuffer buf =3D VIR_BUFFER_INITIALIZER; const char *device; =20 - if (!mem->info.alias) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("missing alias for memory device")); - return NULL; - } - switch ((virDomainMemoryModel) mem->model) { case VIR_DOMAIN_MEMORY_MODEL_NVDIMM: case VIR_DOMAIN_MEMORY_MODEL_DIMM: @@ -3925,8 +3913,7 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, =20 if (vlan >=3D 0) { virBufferAsprintf(&buf, "vlan=3D%d,", vlan); - if (net->info.alias) - virBufferAsprintf(&buf, "name=3Dhost%s,", net->info.alias); + virBufferAsprintf(&buf, "name=3Dhost%s,", net->info.alias); } else { virBufferAsprintf(&buf, "id=3Dhost%s,", net->info.alias); } @@ -5860,12 +5847,6 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, virDomainRNGDefPtr rng =3D def->rngs[i]; char *tmp; =20 - if (!rng->info.alias) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("RNG device is missing alias")); - return -1; - } - /* possibly add character device for backend */ if (qemuBuildRNGBackendChrdevStr(logManager, cmd, cfg, def, rng, qemuCaps, &tmp, --=20 2.13.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue Apr 30 02:40:14 2024 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 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1506006306263714.0774760006066; Thu, 21 Sep 2017 08:05:06 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A54C7C0828CB; Thu, 21 Sep 2017 15:05:04 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C57845D97C; Thu, 21 Sep 2017 15:05:03 +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 C31F81855948; Thu, 21 Sep 2017 15:05:02 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v8LElbRu014682 for ; Thu, 21 Sep 2017 10:47:37 -0400 Received: by smtp.corp.redhat.com (Postfix) id 8DD156031A; Thu, 21 Sep 2017 14:47:37 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 15E9760469 for ; Thu, 21 Sep 2017 14:47:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A54C7C0828CB Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 21 Sep 2017 16:47:06 +0200 Message-Id: <4701f4748dae5bb1963800d7718dcac4e67a9b20.1506005021.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v1 2/7] qemuAssignDeviceRNGAlias: Allow index to be passed 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: , MIME-Version: 1.0 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Thu, 21 Sep 2017 15:05:05 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" When generating aliases for RNG at the domain startup phase it make no sense trying to recalculate the next free index every time. We already know the index - it's the same as the index in the def->rngs[] array. Signed-off-by: Michal Privoznik --- src/qemu/qemu_alias.c | 22 +++++++++++++--------- src/qemu/qemu_alias.h | 3 ++- src/qemu/qemu_hotplug.c | 2 +- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c index 914b2b94d..4ac41947c 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -314,18 +314,22 @@ qemuAssignDeviceRedirdevAlias(virDomainDefPtr def, =20 int qemuAssignDeviceRNGAlias(virDomainDefPtr def, - virDomainRNGDefPtr rng) + virDomainRNGDefPtr rng, + int idx) { - size_t i; - int maxidx =3D 0; - int idx; + if (idx =3D=3D -1) { + size_t i; + idx =3D 0; + for (i =3D 0; i < def->nrngs; i++) { + int thisidx; + thisidx =3D qemuDomainDeviceAliasIndex(&def->rngs[i]->info, "r= ng"); =20 - for (i =3D 0; i < def->nrngs; i++) { - if ((idx =3D qemuDomainDeviceAliasIndex(&def->rngs[i]->info, "rng"= )) >=3D maxidx) - maxidx =3D idx + 1; + if (thisidx >=3D idx) + idx =3D thisidx + 1; + } } =20 - if (virAsprintf(&rng->info.alias, "rng%d", maxidx) < 0) + if (virAsprintf(&rng->info.alias, "rng%d", idx) < 0) return -1; =20 return 0; @@ -490,7 +494,7 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCap= sPtr qemuCaps) return -1; } for (i =3D 0; i < def->nrngs; i++) { - if (virAsprintf(&def->rngs[i]->info.alias, "rng%zu", i) < 0) + if (qemuAssignDeviceRNGAlias(def, def->rngs[i], i) < 0) return -1; } if (def->tpm) { diff --git a/src/qemu/qemu_alias.h b/src/qemu/qemu_alias.h index 300fd4de5..860ab6c0c 100644 --- a/src/qemu/qemu_alias.h +++ b/src/qemu/qemu_alias.h @@ -55,7 +55,8 @@ int qemuAssignDeviceRedirdevAlias(virDomainDefPtr def, int idx); =20 int qemuAssignDeviceRNGAlias(virDomainDefPtr def, - virDomainRNGDefPtr rng); + virDomainRNGDefPtr rng, + int idx); =20 int qemuAssignDeviceMemoryAlias(virDomainDefPtr def, virDomainMemoryDefPtr mems, diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 7dd6e5fd9..816dbd46e 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -2073,7 +2073,7 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, int ret =3D -1; int rv; =20 - if (qemuAssignDeviceRNGAlias(vm->def, rng) < 0) + if (qemuAssignDeviceRNGAlias(vm->def, rng, -1) < 0) goto cleanup; =20 /* preallocate space for the device definition */ --=20 2.13.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue Apr 30 02:40:14 2024 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 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1506008693428364.6509696672464; Thu, 21 Sep 2017 08:44:53 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6AF93C05B1E7; Thu, 21 Sep 2017 15:44:52 +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 31761610B0; Thu, 21 Sep 2017 15:44:52 +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 ED4F141F78; Thu, 21 Sep 2017 15:44:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v8LElcHd014689 for ; Thu, 21 Sep 2017 10:47:38 -0400 Received: by smtp.corp.redhat.com (Postfix) id 61FF060178; Thu, 21 Sep 2017 14:47:38 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id DC2816047F for ; Thu, 21 Sep 2017 14:47:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 6AF93C05B1E7 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 21 Sep 2017 16:47:07 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v1 3/7] qemu: Move device alias assignment to separate functions 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: , MIME-Version: 1.0 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Thu, 21 Sep 2017 15:44:52 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Let's move all the virAsprintf()-s into separate functions for better structure of the code. Later, when somebody wants to generate a device alias, all they need is to expose the function. Signed-off-by: Michal Privoznik --- src/qemu/qemu_alias.c | 90 +++++++++++++++++++++++++++++++++++++++++++++--= ---- 1 file changed, 81 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c index 4ac41947c..e1431e2a2 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -286,6 +286,78 @@ qemuAssignDeviceNetAlias(virDomainDefPtr def, } =20 =20 +static int +qemuAssignDeviceFSAlias(virDomainFSDefPtr fss, + int idx) +{ + return virAsprintf(&fss->info.alias, "fs%d", idx); +} + + +static int +qemuAssignDeviceSoundAlias(virDomainSoundDefPtr sound, + int idx) +{ + return virAsprintf(&sound->info.alias, "sound%d", idx); +} + + +static int +qemuAssignDeviceVideoAlias(virDomainVideoDefPtr video, + int idx) +{ + return virAsprintf(&video->info.alias, "video%d", idx); +} + + +static int +qemuAssignDeviceInputAlias(virDomainInputDefPtr input, + int idx) +{ + return virAsprintf(&input->info.alias, "input%d", idx); +} + + +static int +qemuAssignDeviceHubAlias(virDomainHubDefPtr hub, + int idx) +{ + return virAsprintf(&hub->info.alias, "hub%d", idx); +} + + +static int +qemuAssignDeviceSmartcardAlias(virDomainSmartcardDefPtr smartcard, + int idx) +{ + return virAsprintf(&smartcard->info.alias, "smartcard%d", idx); +} + + +static int +qemuAssignDeviceWatchdogAlias(virDomainWatchdogDefPtr watchdog, + int idx) +{ + return virAsprintf(&watchdog->info.alias, "watchdog%d", idx); +} + + +static int +qemuAssingDeviceMemballoonAlias(virDomainMemballoonDefPtr memballoon, + int idx) +{ + return virAsprintf(&memballoon->info.alias, "balloon%d", idx); +} + + +static int +qemuAssignDeviceTPMAlias(virDomainTPMDefPtr tpm, + int idx) +{ + return virAsprintf(&tpm->info.alias, "tpm%d", idx); +} + + int qemuAssignDeviceRedirdevAlias(virDomainDefPtr def, virDomainRedirdevDefPtr redirdev, @@ -424,11 +496,11 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUC= apsPtr qemuCaps) } =20 for (i =3D 0; i < def->nfss; i++) { - if (virAsprintf(&def->fss[i]->info.alias, "fs%zu", i) < 0) + if (qemuAssignDeviceFSAlias(def->fss[i], i) < 0) return -1; } for (i =3D 0; i < def->nsounds; i++) { - if (virAsprintf(&def->sounds[i]->info.alias, "sound%zu", i) < 0) + if (qemuAssignDeviceSoundAlias(def->sounds[i], i) < 0) return -1; } for (i =3D 0; i < def->nhostdevs; i++) { @@ -446,7 +518,7 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCap= sPtr qemuCaps) return -1; } for (i =3D 0; i < def->nvideos; i++) { - if (virAsprintf(&def->videos[i]->info.alias, "video%zu", i) < 0) + if (qemuAssignDeviceVideoAlias(def->videos[i], i) < 0) return -1; } for (i =3D 0; i < def->ncontrollers; i++) { @@ -454,7 +526,7 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCap= sPtr qemuCaps) return -1; } for (i =3D 0; i < def->ninputs; i++) { - if (virAsprintf(&def->inputs[i]->info.alias, "input%zu", i) < 0) + if (qemuAssignDeviceInputAlias(def->inputs[i], i) < 0) return -1; } for (i =3D 0; i < def->nparallels; i++) { @@ -474,7 +546,7 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCap= sPtr qemuCaps) return -1; } for (i =3D 0; i < def->nhubs; i++) { - if (virAsprintf(&def->hubs[i]->info.alias, "hub%zu", i) < 0) + if (qemuAssignDeviceHubAlias(def->hubs[i], i) < 0) return -1; } for (i =3D 0; i < def->nshmems; i++) { @@ -482,15 +554,15 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUC= apsPtr qemuCaps) return -1; } for (i =3D 0; i < def->nsmartcards; i++) { - if (virAsprintf(&def->smartcards[i]->info.alias, "smartcard%zu", i= ) < 0) + if (qemuAssignDeviceSmartcardAlias(def->smartcards[i], i) < 0) return -1; } if (def->watchdog) { - if (virAsprintf(&def->watchdog->info.alias, "watchdog%d", 0) < 0) + if (qemuAssignDeviceWatchdogAlias(def->watchdog, 0) < 0) return -1; } if (def->memballoon) { - if (virAsprintf(&def->memballoon->info.alias, "balloon%d", 0) < 0) + if (qemuAssingDeviceMemballoonAlias(def->memballoon, 0) < 0) return -1; } for (i =3D 0; i < def->nrngs; i++) { @@ -498,7 +570,7 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCap= sPtr qemuCaps) return -1; } if (def->tpm) { - if (virAsprintf(&def->tpm->info.alias, "tpm%d", 0) < 0) + if (qemuAssignDeviceTPMAlias(def->tpm, 0) < 0) return -1; } for (i =3D 0; i < def->nmems; i++) { --=20 2.13.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue Apr 30 02:40:14 2024 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 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1506008712788288.58722045837976; Thu, 21 Sep 2017 08:45:12 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1407EC047B82; Thu, 21 Sep 2017 15:45:11 +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 DA28B5D964; Thu, 21 Sep 2017 15:45:10 +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 94B83410B4; Thu, 21 Sep 2017 15:45:10 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v8LEldMj014696 for ; Thu, 21 Sep 2017 10:47:39 -0400 Received: by smtp.corp.redhat.com (Postfix) id 43037600C2; Thu, 21 Sep 2017 14:47:39 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id BFC4F5C7A2 for ; Thu, 21 Sep 2017 14:47:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 1407EC047B82 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 21 Sep 2017 16:47:08 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v1 4/7] qemu: Allow regeneration of aliases 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: , MIME-Version: 1.0 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Thu, 21 Sep 2017 15:45:11 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In the near future the qemuAssignDeviceAliases() function is going to be called multiple times: once at the domain define time, then in domain prepare phase. To avoid regenerating the same aliases the second time we need to be able to tell the function which time it is being called. Signed-off-by: Michal Privoznik --- src/qemu/qemu_alias.c | 113 ++++++++++++++++++++++++++++++++++++++++++++= ++-- src/qemu/qemu_alias.h | 4 +- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_process.c | 2 +- tests/qemuhotplugtest.c | 2 +- 5 files changed, 115 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c index e1431e2a2..00868c50f 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -481,25 +481,99 @@ qemuAssignDeviceShmemAlias(virDomainDefPtr def, } =20 =20 +/* + * qemuAssignDeviceAliases: + * @def: domain definition + * @qemuCaps: qemu capabilities + * @regenerate: forcibly regenerate aliases + * + * Assign aliases to domain devices. If @regenerate is false only + * the missing aliases are generated leaving already assigned + * aliases untouched. If @regenerate is true any preexisting + * aliases are overwritten. + * + * Returns 0 on success, -1 otherwise. + */ int -qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps) +qemuAssignDeviceAliases(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps, + bool regenerate) { size_t i; =20 + if (regenerate) { + /* If we need to regenerate the aliases, we have to free + * them all upfront because there are some dependencies, + * e.g. an interface can be a hostdev and so on. + * Therefore, if we'd do the freeing in the loop below we + * might not start from zero. */ + for (i =3D 0; i < def->ndisks; i++) + VIR_FREE(def->disks[i]->info.alias); + for (i =3D 0; i < def->nnets; i++) + VIR_FREE(def->nets[i]->info.alias); + for (i =3D 0; i < def->nfss; i++) + VIR_FREE(def->fss[i]->info.alias); + for (i =3D 0; i < def->nsounds; i++) + VIR_FREE(def->sounds[i]->info.alias); + for (i =3D 0; i < def->nhostdevs; i++) + VIR_FREE(def->hostdevs[i]->info->alias); + for (i =3D 0; i < def->nredirdevs; i++) + VIR_FREE(def->redirdevs[i]->info.alias); + for (i =3D 0; i < def->nvideos; i++) + VIR_FREE(def->videos[i]->info.alias); + for (i =3D 0; i < def->ncontrollers; i++) + VIR_FREE(def->controllers[i]->info.alias); + for (i =3D 0; i < def->ninputs; i++) + VIR_FREE(def->inputs[i]->info.alias); + for (i =3D 0; i < def->nparallels; i++) + VIR_FREE(def->parallels[i]->info.alias); + for (i =3D 0; i < def->nserials; i++) + VIR_FREE(def->serials[i]->info.alias); + for (i =3D 0; i < def->nchannels; i++) + VIR_FREE(def->channels[i]->info.alias); + for (i =3D 0; i < def->nconsoles; i++) + VIR_FREE(def->consoles[i]->info.alias); + for (i =3D 0; i < def->nhubs; i++) + VIR_FREE(def->hubs[i]->info.alias); + for (i =3D 0; i < def->nshmems; i++) + VIR_FREE(def->shmems[i]->info.alias); + for (i =3D 0; i < def->nsmartcards; i++) + VIR_FREE(def->smartcards[i]->info.alias); + if (def->watchdog) + VIR_FREE(def->watchdog->info.alias); + if (def->memballoon) + VIR_FREE(def->memballoon->info.alias); + for (i =3D 0; i < def->nrngs; i++) + VIR_FREE(def->rngs[i]->info.alias); + if (def->tpm) + VIR_FREE(def->tpm->info.alias); + for (i =3D 0; i < def->nmems; i++) + VIR_FREE(def->mems[i]->info.alias); + } + + for (i =3D 0; i < def->ndisks; i++) { + if (def->disks[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceDiskAlias(def, def->disks[i], qemuCaps) < 0) return -1; } for (i =3D 0; i < def->nnets; i++) { + if (def->nets[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceNetAlias(def, def->nets[i], -1) < 0) return -1; } =20 for (i =3D 0; i < def->nfss; i++) { + if (def->fss[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceFSAlias(def->fss[i], i) < 0) return -1; } for (i =3D 0; i < def->nsounds; i++) { + if (def->sounds[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceSoundAlias(def->sounds[i], i) < 0) return -1; } @@ -509,71 +583,102 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMU= CapsPtr qemuCaps) * linked to a NetDef, they will share an info and the alias * will already be set, so don't try to set it again. */ + if (def->hostdevs[i]->info->alias && !regenerate) + continue; if (!def->hostdevs[i]->info->alias && qemuAssignDeviceHostdevAlias(def, &def->hostdevs[i]->info->ali= as, -1) < 0) return -1; } for (i =3D 0; i < def->nredirdevs; i++) { + if (def->redirdevs[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceRedirdevAlias(def, def->redirdevs[i], i) < 0) return -1; } for (i =3D 0; i < def->nvideos; i++) { + if (def->videos[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceVideoAlias(def->videos[i], i) < 0) return -1; } for (i =3D 0; i < def->ncontrollers; i++) { + if (def->controllers[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceControllerAlias(def, qemuCaps, def->controller= s[i]) < 0) return -1; } for (i =3D 0; i < def->ninputs; i++) { + if (def->inputs[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceInputAlias(def->inputs[i], i) < 0) return -1; } for (i =3D 0; i < def->nparallels; i++) { + if (def->parallels[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceChrAlias(def, def->parallels[i], i) < 0) return -1; } for (i =3D 0; i < def->nserials; i++) { + if (def->serials[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceChrAlias(def, def->serials[i], i) < 0) return -1; } for (i =3D 0; i < def->nchannels; i++) { + if (def->channels[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceChrAlias(def, def->channels[i], i) < 0) return -1; } for (i =3D 0; i < def->nconsoles; i++) { + if (def->consoles[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceChrAlias(def, def->consoles[i], i) < 0) return -1; } for (i =3D 0; i < def->nhubs; i++) { + if (def->hubs[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceHubAlias(def->hubs[i], i) < 0) return -1; } for (i =3D 0; i < def->nshmems; i++) { + if (def->shmems[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceShmemAlias(def, def->shmems[i], i) < 0) return -1; } for (i =3D 0; i < def->nsmartcards; i++) { + if (def->smartcards[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceSmartcardAlias(def->smartcards[i], i) < 0) return -1; } - if (def->watchdog) { + if (def->watchdog && + (!def->watchdog->info.alias || regenerate)) { if (qemuAssignDeviceWatchdogAlias(def->watchdog, 0) < 0) return -1; } - if (def->memballoon) { + if (def->memballoon && + (!def->memballoon->info.alias || regenerate)) { if (qemuAssingDeviceMemballoonAlias(def->memballoon, 0) < 0) return -1; } for (i =3D 0; i < def->nrngs; i++) { + if (def->rngs[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceRNGAlias(def, def->rngs[i], i) < 0) return -1; } - if (def->tpm) { + if (def->tpm && + (!def->tpm->info.alias || regenerate)) { if (qemuAssignDeviceTPMAlias(def->tpm, 0) < 0) return -1; } for (i =3D 0; i < def->nmems; i++) { + if (def->mems[i]->info.alias && !regenerate) + continue; if (qemuAssignDeviceMemoryAlias(NULL, def->mems[i], false) < 0) return -1; } diff --git a/src/qemu/qemu_alias.h b/src/qemu/qemu_alias.h index 860ab6c0c..e33a05580 100644 --- a/src/qemu/qemu_alias.h +++ b/src/qemu/qemu_alias.h @@ -66,7 +66,9 @@ int qemuAssignDeviceShmemAlias(virDomainDefPtr def, virDomainShmemDefPtr shmem, int idx); =20 -int qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps); +int qemuAssignDeviceAliases(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps, + bool regenerate); =20 int qemuDomainDeviceAliasIndex(const virDomainDeviceInfo *info, const char *prefix); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 1b271792d..64ba7d454 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -16145,7 +16145,7 @@ static virDomainPtr qemuDomainQemuAttach(virConnect= Ptr conn, def->emulator))) goto cleanup; =20 - if (qemuAssignDeviceAliases(def, qemuCaps) < 0) + if (qemuAssignDeviceAliases(def, qemuCaps, true) < 0) goto cleanup; =20 if (!(vm =3D virDomainObjListAdd(driver->domains, def, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index e6cc41e13..448de679c 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5340,7 +5340,7 @@ qemuProcessPrepareDomain(virConnectPtr conn, goto cleanup; } =20 - if (qemuAssignDeviceAliases(vm->def, priv->qemuCaps) < 0) + if (qemuAssignDeviceAliases(vm->def, priv->qemuCaps, false) < 0) goto cleanup; =20 VIR_DEBUG("Setting graphics devices"); diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index 23a498617..0b1b00176 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -95,7 +95,7 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt, goto cleanup; } =20 - if (qemuAssignDeviceAliases((*vm)->def, priv->qemuCaps) < 0) + if (qemuAssignDeviceAliases((*vm)->def, priv->qemuCaps, true) < 0) goto cleanup; =20 (*vm)->def->id =3D QEMU_HOTPLUG_TEST_DOMAIN_ID; --=20 2.13.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue Apr 30 02:40:14 2024 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 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1506006333530615.3757248928558; Thu, 21 Sep 2017 08:05:33 -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 440DAC0587C1; Thu, 21 Sep 2017 15:05:31 +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 1AD085EE16; Thu, 21 Sep 2017 15:05:31 +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 D83053FACF; Thu, 21 Sep 2017 15:05:30 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v8LElenD014710 for ; Thu, 21 Sep 2017 10:47:40 -0400 Received: by smtp.corp.redhat.com (Postfix) id 138A360178; Thu, 21 Sep 2017 14:47:40 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 90022600C2 for ; Thu, 21 Sep 2017 14:47:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 440DAC0587C1 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 21 Sep 2017 16:47:09 +0200 Message-Id: <7025f23d4de18f3935100bed76891693faf5b776.1506005021.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v1 5/7] domain: Add virDomainDefAssignAliasesCallback 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: , MIME-Version: 1.0 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.32]); Thu, 21 Sep 2017 15:05:31 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This will be called at the end of virDomainDefPostParse to allow hypervisor drivers to fill in device aliases. Signed-off-by: Michal Privoznik --- src/conf/domain_conf.c | 7 +++++++ src/conf/domain_conf.h | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e3e9fc748..653357531 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5011,6 +5011,13 @@ virDomainDefPostParseInternal(virDomainDefPtr def, goto cleanup; } =20 + if (xmlopt->config.assignAliasesCallback) { + ret =3D xmlopt->config.assignAliasesCallback(def, caps, parseFlags, + xmlopt->config.priv, + data.parseOpaque); + if (virDomainDefPostParseCheckFailure(def, parseFlags, ret) < 0) + goto cleanup; + } if ((ret =3D virDomainDefPostParseCheckFeatures(def, xmlopt)) < 0) goto cleanup; =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e11ae5247..764360ccb 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2559,6 +2559,18 @@ typedef int (*virDomainDefAssignAddressesCallback)(v= irDomainDef *def, void *opaque, void *parseOpaque); =20 +/* Driver callback for assigning device aliases, called at the + * end of parsing, after all defaults and implicit devices have + * been added and all addresses were assigned. @parseOpaque is + * opaque data passed by virDomainDefParse *caller, @opaque is + * opaque data set by driver (usually pointer to driver private + * data). */ +typedef int (*virDomainDefAssignAliasesCallback)(virDomainDefPtr def, + virCapsPtr caps, + unsigned int parseFlags, + void *opaque, + void *parseOpaque); + typedef int (*virDomainDefPostParseDataAlloc)(const virDomainDef *def, virCapsPtr caps, unsigned int parseFlags, @@ -2588,6 +2600,7 @@ struct _virDomainDefParserConfig { virDomainDefPostParseCallback domainPostParseCallback; virDomainDeviceDefPostParseCallback devicesPostParseCallback; virDomainDefAssignAddressesCallback assignAddressesCallback; + virDomainDefAssignAliasesCallback assignAliasesCallback; virDomainDefPostParseDataFree domainPostParseDataFree; =20 /* validation callbacks */ --=20 2.13.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue Apr 30 02:40:14 2024 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 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1506007379469461.8883632034813; Thu, 21 Sep 2017 08:22:59 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 289C781240; Thu, 21 Sep 2017 15:22:58 +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 F1BCC5E1CA; Thu, 21 Sep 2017 15:22:57 +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 A96603FA57; Thu, 21 Sep 2017 15:22:57 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v8LEleW9014719 for ; Thu, 21 Sep 2017 10:47:40 -0400 Received: by smtp.corp.redhat.com (Postfix) id D93CA60178; Thu, 21 Sep 2017 14:47:40 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 61385600C2 for ; Thu, 21 Sep 2017 14:47:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 289C781240 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 21 Sep 2017 16:47:10 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v1 6/7] qemu: Assign device aliases at define time 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: , MIME-Version: 1.0 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 21 Sep 2017 15:22:58 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" https://bugzilla.redhat.com/show_bug.cgi?id=3D1434451 Users might want to uniquely identify devices even before the domain is started. Therefore we must generate device aliases right at the define time. Signed-off-by: Michal Privoznik --- src/qemu/qemu_domain.c | 24 ++++++++++++++++++= ++++ tests/qemuxml2argvtest.c | 9 ++++++++ .../qemuxml2xmlout-channel-virtio-state-active.xml | 20 +++++++++++++++--- .../qemuxml2xmlout-disk-active-commit.xml | 16 ++++++++++++--- .../qemuxml2xmlout-disk-backing-chains-active.xml | 19 ++++++++++++++--- .../qemuxml2xmlout-disk-mirror-active.xml | 19 ++++++++++++++--- .../qemuxml2xmlout-disk-mirror-old.xml | 19 ++++++++++++++--- .../qemuxml2xmlout-seclabel-static-labelskip.xml | 16 ++++++++++++--- 8 files changed, 124 insertions(+), 18 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index ee6641847..15fd88dcc 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3936,6 +3936,29 @@ qemuDomainDefAssignAddresses(virDomainDef *def, } =20 =20 +static int +qemuDomainDefAssignAliases(virDomainDef *def, + virCapsPtr caps ATTRIBUTE_UNUSED, + unsigned int parseFlags ATTRIBUTE_UNUSED, + void *opaque ATTRIBUTE_UNUSED, + void *parseOpaque) +{ + /* Note that qemuCaps may be NULL when this function is called. This + * function shall not fail in that case. It will be re-run on VM start= up + * with the capabilities populated. */ + virQEMUCapsPtr qemuCaps =3D parseOpaque; + + /* Skip address assignment if @qemuCaps is not present. In such case d= evices + * which are automatically added may be missing. Additionally @qemuCap= s should + * only be missing when reloading configs, thus aliases were already + * assigned. */ + if (!qemuCaps) + return 1; + + return qemuAssignDeviceAliases(def, qemuCaps, true); +} + + static int qemuDomainPostParseDataAlloc(const virDomainDef *def, virCapsPtr caps ATTRIBUTE_UNUSED, @@ -3969,6 +3992,7 @@ virDomainDefParserConfig virQEMUDriverDomainDefParser= Config =3D { .devicesPostParseCallback =3D qemuDomainDeviceDefPostParse, .domainPostParseCallback =3D qemuDomainDefPostParse, .assignAddressesCallback =3D qemuDomainDefAssignAddresses, + .assignAliasesCallback =3D qemuDomainDefAssignAliases, .domainValidateCallback =3D qemuDomainDefValidate, .deviceValidateCallback =3D qemuDomainDeviceDefValidate, =20 diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 70be0c32d..5c2a45fd3 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -485,6 +485,15 @@ testCompareXMLToArgv(const void *data) if (testUpdateQEMUCaps(info, vm, driver.caps) < 0) goto cleanup; =20 + /* Forcibly regenerate device aliases. They are generated in + * virDomainDefParseFile(), however, qemuCaps are filled out + * just partially therefore the generated aliases might be + * wrong. It's only after testUpdateQEMUCaps() call that we + * have full set of caps. However, we can't move the call any + * sooner because it needs vm->def. */ + if (qemuAssignDeviceAliases(vm->def, info->qemuCaps, true) < 0) + goto cleanup; + log =3D virTestLogContentAndReset(); VIR_FREE(log); virResetLastError(); diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-channel-virtio-state-a= ctive.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-channel-virtio-state-ac= tive.xml index 8cddbeff7..326e285cb 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-channel-virtio-state-active.x= ml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-channel-virtio-state-active.x= ml @@ -18,33 +18,47 @@ +
+
+
+
- + + + +
+
+
- - + + + + + + +
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-active-commit.xml= b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-active-commit.xml index cc26af109..f63e8c3b7 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-active-commit.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-active-commit.xml @@ -27,18 +27,28 @@ +
+
+
- - - + + + + + + + + + +
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-backing-chains-ac= tive.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-backing-chains-acti= ve.xml index 83d47df56..5abe21270 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-backing-chains-active.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-backing-chains-active.xml @@ -25,6 +25,7 @@ +
@@ -58,6 +59,7 @@ +
@@ -67,6 +69,7 @@ +
@@ -85,6 +88,7 @@ +
@@ -92,15 +96,24 @@ +
+
- - - + + + + + + + + + +
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-active.xml= b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-active.xml index c1e8a33ec..ebe6e4471 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-active.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-active.xml @@ -21,6 +21,7 @@ +
@@ -28,6 +29,7 @@ +
@@ -38,6 +40,7 @@ +
@@ -48,18 +51,28 @@ +
+
+
- - - + + + + + + + + + +
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml b/= tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml index e390bc02f..451737621 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml @@ -21,6 +21,7 @@ +
@@ -28,6 +29,7 @@ +
@@ -38,24 +40,35 @@ +
+
+
+
- - - + + + + + + + + + +
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-seclabel-static-labels= kip.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-seclabel-static-labelskip= .xml index d37b950cb..8ea5a29d7 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-seclabel-static-labelskip.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-seclabel-static-labelskip.xml @@ -20,18 +20,28 @@ +
+
+
- - - + + + + + + + + + +
--=20 2.13.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue Apr 30 02:40:14 2024 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 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1506012418746452.55925034535755; Thu, 21 Sep 2017 09:46:58 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8162DC07F989; Thu, 21 Sep 2017 16:46:57 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 26E376FDA1; Thu, 21 Sep 2017 16:46:57 +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 D23871855943; Thu, 21 Sep 2017 16:46:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v8LG16P9030251 for ; Thu, 21 Sep 2017 12:01:06 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7C2CD503AF; Thu, 21 Sep 2017 16:01:06 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 036C060BE2 for ; Thu, 21 Sep 2017 16:01:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 8162DC07F989 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 21 Sep 2017 18:00:51 +0200 Message-Id: <4dec5931ac7fa93a8437a9e8ae616a2a716805d7.1506005021.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v1 7/7] conf: Format device alias into inactive XML too 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: , MIME-Version: 1.0 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Thu, 21 Sep 2017 16:46:58 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Now that we are generating the device aliases at the define time, we might as well format them into inactive XML. Signed-off-by: Michal Privoznik --- I've trimmed out all the test/ XML changes. I've generated them using: tests $ VIR_TEST_REGENERATE_OUTPUT=3D1 ./test With the changes in this patch would be ~1MB in size. If interested regener= ate them on your own. Alternatively, you can find them at my github. src/conf/domain_conf.c | 7 +- tests/qemuxml2xmltest.c | 63 ++++++++++- 489 files changed, 7417 insertions(+), 1623 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 653357531..ae38bae47 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5770,10 +5770,9 @@ virDomainDeviceInfoFormat(virBufferPtr buf, =20 virBufferAddLit(buf, "/>\n"); } - if (info->alias && - !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) { + + if (info->alias) virBufferAsprintf(buf, "\n", info->alias); - } =20 if (info->mastertype =3D=3D VIR_DOMAIN_CONTROLLER_MASTER_USB) { virBufferAsprintf(buf, "\n", @@ -6333,7 +6332,7 @@ virDomainDeviceInfoParseXML(xmlNodePtr node, while (cur !=3D NULL) { if (cur->type =3D=3D XML_ELEMENT_NODE) { if (alias =3D=3D NULL && - !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) && + !(flags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE) && virXMLNodeNameEqual(cur, "alias")) { alias =3D cur; } else if (address =3D=3D NULL && diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 4b2fbd990..c9afafe14 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -13,11 +13,16 @@ #ifdef WITH_QEMU =20 # include "internal.h" +# include "qemu/qemu_alias.h" # include "qemu/qemu_domain_address.h" # include "qemu/qemu_domain.h" # include "testutilsqemu.h" # include "virstring.h" =20 +# define __QEMU_CAPSPRIV_H_ALLOW__ +# include "qemu/qemu_capspriv.h" +# undef __QEMU_CAPSPRIV_H_ALLOW__ + # define VIR_FROM_THIS VIR_FROM_NONE =20 static virQEMUDriver driver; @@ -38,6 +43,25 @@ struct testInfo { virQEMUCapsPtr qemuCaps; }; =20 + +static int +testUpdateQEMUCaps(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps) +{ + virQEMUCapsSetArch(qemuCaps, def->os.arch); + + virQEMUCapsInitQMPBasicArch(qemuCaps); + + /* We need to pretend QEMU 2.0.0 is in use so that pSeries guests + * will get the correct alias assigned to their buses. + * See virQEMUCapsHasPCIMultiBus() */ + virQEMUCapsSetVersion(qemuCaps, 2000000); + + return 0; +} + + + static int qemuXML2XMLActivePreFormatCallback(virDomainDefPtr def, const void *opaque) @@ -48,6 +72,19 @@ qemuXML2XMLActivePreFormatCallback(virDomainDefPtr def, if (!info->activeVcpus) info->activeVcpus =3D virDomainDefGetOnlineVcpumap(def); =20 + /* Update capabilities according to domain definition, + * just like we're doing in qemuxml2argvtest. */ + testUpdateQEMUCaps(def, info->qemuCaps); + + /* Forcibly regenerate device aliases. They are generated in + * virDomainDefParseFile(), however, qemuCaps are filled out + * just partially therefore the generated aliases might be + * wrong. It's only after testUpdateQEMUCaps() call that we + * have full set of caps. However, we can't move the call any + * sooner because it needs vm->def. */ + if (qemuAssignDeviceAliases(def, info->qemuCaps, true) < 0) + return -1; + return 0; } =20 @@ -64,6 +101,29 @@ testXML2XMLActive(const void *opaque) } =20 =20 +static int +qemuXML2XMLInactivePreFormatCallback(virDomainDefPtr def, + const void *opaque) +{ + struct testInfo *info =3D (struct testInfo *) opaque; + + /* Update capabilities according to domain definition, + * just like we're doing in qemuxml2argvtest. */ + testUpdateQEMUCaps(def, info->qemuCaps); + + /* Forcibly regenerate device aliases. They are generated in + * virDomainDefParseFile(), however, qemuCaps are filled out + * just partially therefore the generated aliases might be + * wrong. It's only after testUpdateQEMUCaps() call that we + * have full set of caps. However, we can't move the call any + * sooner because it needs vm->def. */ + if (qemuAssignDeviceAliases(def, info->qemuCaps, true) < 0) + return -1; + + return 0; +} + + static int testXML2XMLInactive(const void *opaque) { @@ -71,7 +131,8 @@ testXML2XMLInactive(const void *opaque) =20 return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, info->in= Name, info->outInactiveName, false, - NULL, opaque, 0, + qemuXML2XMLInactivePreFormatCallback, + opaque, 0, TEST_COMPARE_DOM_XML2XML_RESULT_SUCC= ESS); } =20 --=20 2.13.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list