From nobody Tue Dec 16 08:03:46 2025 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 1502887271515459.99247881531574; Wed, 16 Aug 2017 05:41:11 -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 CD497CAA6F; Wed, 16 Aug 2017 12:41:09 +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 9C8725C542; Wed, 16 Aug 2017 12:41:09 +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 4A54F1806105; Wed, 16 Aug 2017 12:41:09 +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 v7GCerM8021714 for ; Wed, 16 Aug 2017 08:40:53 -0400 Received: by smtp.corp.redhat.com (Postfix) id 71D527D971; Wed, 16 Aug 2017 12:40:53 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id E63F77D57E for ; Wed, 16 Aug 2017 12:40:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com CD497CAA6F Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Pavel Hrdina To: libvir-list@redhat.com Date: Wed, 16 Aug 2017 14:40:40 +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 03/10] conf: use virXMLPropString for virDomainVirtioOptionsParseXML 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.38]); Wed, 16 Aug 2017 12:41:10 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" XPath is good for random search of elements, not for accessing attributes of one node. Signed-off-by: Pavel Hrdina --- src/conf/domain_conf.c | 49 ++++++++++++++++++++++++++++------------------= --- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 281dc68f0e..ec4fbf36b3 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1114,7 +1114,7 @@ virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr = xmlopt) } =20 static int -virDomainVirtioOptionsParseXML(xmlXPathContextPtr ctxt, +virDomainVirtioOptionsParseXML(xmlNodePtr driver, virDomainVirtioOptionsPtr *virtio) { char *str =3D NULL; @@ -1122,12 +1122,15 @@ virDomainVirtioOptionsParseXML(xmlXPathContextPtr c= txt, int val; virDomainVirtioOptionsPtr res; =20 + if (*virtio || !driver) + return 0; + if (VIR_ALLOC(*virtio) < 0) return -1; =20 res =3D *virtio; =20 - if ((str =3D virXPathString("string(./driver/@iommu)", ctxt))) { + if ((str =3D virXMLPropString(driver, "iommu"))) { if ((val =3D virTristateSwitchTypeFromString(str)) <=3D 0) { virReportError(VIR_ERR_XML_ERROR, "%s", _("invalid iommu value")); @@ -1137,7 +1140,7 @@ virDomainVirtioOptionsParseXML(xmlXPathContextPtr ctx= t, } VIR_FREE(str); =20 - if ((str =3D virXPathString("string(./driver/@ats)", ctxt))) { + if ((str =3D virXMLPropString(driver, "ats"))) { if ((val =3D virTristateSwitchTypeFromString(str)) <=3D 0) { virReportError(VIR_ERR_XML_ERROR, "%s", _("invalid ats value")); @@ -8406,6 +8409,9 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, } } else if (!def->src->driverName && virXMLNodeNameEqual(cur, "driver")) { + if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0) + goto error; + if (virDomainDiskDefDriverParseXML(def, cur) < 0) goto error; } else if (!def->mirror && @@ -8491,9 +8497,6 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, } } =20 - if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) - goto error; - /* Disk volume types will have authentication information handled in * virStorageTranslateDiskSourcePool */ @@ -9078,6 +9081,9 @@ virDomainControllerDefParseXML(xmlNodePtr node, max_sectors =3D virXMLPropString(cur, "max_sectors"); ioeventfd =3D virXMLPropString(cur, "ioeventfd"); iothread =3D virXMLPropString(cur, "iothread"); + + if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0) + goto error; } else if (virXMLNodeNameEqual(cur, "model")) { if (processedModel) { virReportError(VIR_ERR_XML_ERROR, "%s", @@ -9105,9 +9111,6 @@ virDomainControllerDefParseXML(xmlNodePtr node, cur =3D cur->next; } =20 - if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) - goto error; - /* node is parsed differently from target attributes because * someone thought it should be a subelement instead... */ @@ -9483,6 +9486,9 @@ virDomainFSDefParseXML(xmlNodePtr node, wrpolicy =3D virXMLPropString(cur, "wrpolicy"); if (!format) format =3D virXMLPropString(cur, "format"); + + if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0) + goto error; } } cur =3D cur->next; @@ -9544,9 +9550,6 @@ virDomainFSDefParseXML(xmlNodePtr node, goto error; } =20 - if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) - goto error; - def->src->path =3D source; source =3D NULL; def->dst =3D target; @@ -9986,6 +9989,9 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt, queues =3D virXMLPropString(cur, "queues"); rx_queue_size =3D virXMLPropString(cur, "rx_queue_size"); tx_queue_size =3D virXMLPropString(cur, "tx_queue_size"); + + if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0) + goto error; } else if (virXMLNodeNameEqual(cur, "filterref")) { if (filter) { virReportError(VIR_ERR_XML_ERROR, "%s", @@ -10563,9 +10569,6 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlop= t, goto error; } =20 - if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) - goto error; - cleanup: ctxt->node =3D oldnode; VIR_FREE(macaddr); @@ -11689,7 +11692,8 @@ virDomainInputDefParseXML(const virDomainDef *dom, goto error; } =20 - if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) + if (virDomainVirtioOptionsParseXML(virXPathNode("./driver", ctxt), + &def->virtio) < 0) goto error; =20 cleanup: @@ -13028,7 +13032,8 @@ virDomainRNGDefParseXML(virDomainXMLOptionPtr xmlop= t, if (virDomainDeviceInfoParseXML(node, NULL, &def->info, flags) < 0) goto error; =20 - if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) + if (virDomainVirtioOptionsParseXML(virXPathNode("./driver", ctxt), + &def->virtio) < 0) goto error; =20 cleanup: @@ -13096,7 +13101,8 @@ virDomainMemballoonDefParseXML(xmlNodePtr node, else if (virDomainDeviceInfoParseXML(node, NULL, &def->info, flags) < = 0) goto error; =20 - if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) + if (virDomainVirtioOptionsParseXML(virXPathNode("./driver", ctxt), + &def->virtio) < 0) goto error; =20 cleanup: @@ -13681,6 +13687,10 @@ virDomainVideoDefParseXML(xmlNodePtr node, =20 def->accel =3D virDomainVideoAccelDefParseXML(cur); } + if (virXMLNodeNameEqual(cur, "driver")) { + if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0) + goto error; + } } cur =3D cur->next; } @@ -13759,9 +13769,6 @@ virDomainVideoDefParseXML(xmlNodePtr node, if (virDomainDeviceInfoParseXML(node, NULL, &def->info, flags) < 0) goto error; =20 - if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) - goto error; - def->driver =3D virDomainVideoDriverDefParseXML(node); =20 cleanup: --=20 2.13.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list