From nobody Sun May 5 16:17:58 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1554421100897675.2129293198728; Thu, 4 Apr 2019 16:38:20 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6457B30832CB; Thu, 4 Apr 2019 23:38:19 +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 3C48C1001E99; Thu, 4 Apr 2019 23:38:19 +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 064053FB13; Thu, 4 Apr 2019 23:38:19 +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 x34NbcaK011007 for ; Thu, 4 Apr 2019 19:37:38 -0400 Received: by smtp.corp.redhat.com (Postfix) id 95E0B6091F; Thu, 4 Apr 2019 23:37:38 +0000 (UTC) Received: from worklaptop.redhat.com (ovpn-124-22.rdu2.redhat.com [10.10.124.22]) by smtp.corp.redhat.com (Postfix) with ESMTP id C125C608E5; Thu, 4 Apr 2019 23:37:37 +0000 (UTC) From: Cole Robinson To: libvirt-list@redhat.com Date: Thu, 4 Apr 2019 19:37:21 -0400 Message-Id: <6160973443b95d23525f6e557151f0bd97dd0c44.1554419814.git.crobinso@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 1/7] conf: domcaps: Report device 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.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Thu, 04 Apr 2019 23:38:19 +0000 (UTC) Content-Type: text/plain; charset="utf-8" This adds device reporting. Example output: virtio virtio-transitional virtio-non-transitional random egd Signed-off-by: Cole Robinson --- docs/formatdomaincaps.html.in | 35 ++++++++++++++++++++++++++++++++++ docs/schemas/domaincaps.rng | 10 ++++++++++ src/conf/domain_capabilities.c | 14 ++++++++++++++ src/conf/domain_capabilities.h | 9 +++++++++ 4 files changed, 68 insertions(+) diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in index 2583f9bead..22ddab4301 100644 --- a/docs/formatdomaincaps.html.in +++ b/docs/formatdomaincaps.html.in @@ -427,6 +427,41 @@ element. =20 + +

RNG device

+

RNG device capabilities are exposed under the + rng element. For instance:

+ +
+<domainCapabilities>
+  ...
+  <devices>
+    <rng supported=3D'yes'>
+      <enum name=3D'model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name=3D'backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+    ...
+  </devices>
+</domainCapabilities>
+
+ +
+
model
+
Options for the model attribute of the + <rng> element.
+
backendModel
+
Options for the model attribute of the + <rng><backend> element.
+
+ +

Features

=20

One more set of XML elements describe the supported features and diff --git a/docs/schemas/domaincaps.rng b/docs/schemas/domaincaps.rng index 3c42cb8075..d1b4d930d9 100644 --- a/docs/schemas/domaincaps.rng +++ b/docs/schemas/domaincaps.rng @@ -154,6 +154,9 @@ + + + =20 @@ -185,6 +188,13 @@ =20 + + + + + + + diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index 5a8f48da61..03757ba8cd 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -543,6 +543,19 @@ virDomainCapsDeviceHostdevFormat(virBufferPtr buf, } =20 =20 +static void +virDomainCapsDeviceRNGFormat(virBufferPtr buf, + virDomainCapsDeviceRNGPtr const rng) +{ + FORMAT_PROLOGUE(rng); + + ENUM_PROCESS(rng, model, virDomainRNGModelTypeToString); + ENUM_PROCESS(rng, backendModel, virDomainRNGBackendTypeToString); + + FORMAT_EPILOGUE(rng); +} + + /** * virDomainCapsFeatureGICFormat: * @buf: target buffer @@ -621,6 +634,7 @@ virDomainCapsFormat(virDomainCapsPtr const caps) virDomainCapsDeviceGraphicsFormat(&buf, &caps->graphics); virDomainCapsDeviceVideoFormat(&buf, &caps->video); virDomainCapsDeviceHostdevFormat(&buf, &caps->hostdev); + virDomainCapsDeviceRNGFormat(&buf, &caps->rng); =20 virBufferAdjustIndent(&buf, -2); virBufferAddLit(&buf, "\n"); diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index 26f4b8c394..052191d284 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -96,6 +96,14 @@ struct _virDomainCapsDeviceHostdev { /* add new fields here */ }; =20 +typedef struct _virDomainCapsDeviceRNG virDomainCapsDeviceRNG; +typedef virDomainCapsDeviceRNG *virDomainCapsDeviceRNGPtr; +struct _virDomainCapsDeviceRNG { + virTristateBool supported; + virDomainCapsEnum model; /* virDomainRNGModel */ + virDomainCapsEnum backendModel; /* virDomainRNGBackend */ +}; + typedef struct _virDomainCapsFeatureGIC virDomainCapsFeatureGIC; typedef virDomainCapsFeatureGIC *virDomainCapsFeatureGICPtr; struct _virDomainCapsFeatureGIC { @@ -165,6 +173,7 @@ struct _virDomainCaps { virDomainCapsDeviceGraphics graphics; virDomainCapsDeviceVideo video; virDomainCapsDeviceHostdev hostdev; + virDomainCapsDeviceRNG rng; /* add new domain devices here */ =20 virDomainCapsFeatureGIC gic; --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:17:58 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1554421104117913.6737949598329; Thu, 4 Apr 2019 16:38:24 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8EA3481F01; Thu, 4 Apr 2019 23:38:22 +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 5F6ED6017E; Thu, 4 Apr 2019 23:38:22 +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 241C03FB14; Thu, 4 Apr 2019 23:38:22 +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 x34NbeGP011020 for ; Thu, 4 Apr 2019 19:37:40 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0BD10608EE; Thu, 4 Apr 2019 23:37:40 +0000 (UTC) Received: from worklaptop.redhat.com (ovpn-124-22.rdu2.redhat.com [10.10.124.22]) by smtp.corp.redhat.com (Postfix) with ESMTP id 01F526092D; Thu, 4 Apr 2019 23:37:38 +0000 (UTC) From: Cole Robinson To: libvirt-list@redhat.com Date: Thu, 4 Apr 2019 19:37:22 -0400 Message-Id: <13488456c6173b3d69b870a747372a2a6d5e3e6e.1554419814.git.crobinso@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 2/7] qemu: capabilities: fill in domcaps 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 04 Apr 2019 23:38:23 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The model logic is taken from qemuDomainRNGDefValidate Signed-off-by: Cole Robinson --- src/qemu/qemu_capabilities.c | 30 +++++++++++++++++++ .../qemu_1.7.0.x86_64.xml | 9 ++++++ .../qemu_2.12.0-virt.aarch64.xml | 11 +++++++ .../qemu_2.12.0.ppc64.xml | 11 +++++++ .../qemu_2.12.0.s390x.xml | 11 +++++++ .../qemu_2.12.0.x86_64.xml | 11 +++++++ .../qemu_2.6.0-virt.aarch64.xml | 11 +++++++ .../qemu_2.6.0.aarch64.xml | 11 +++++++ .../domaincapsschemadata/qemu_2.6.0.ppc64.xml | 11 +++++++ .../qemu_2.6.0.x86_64.xml | 11 +++++++ .../domaincapsschemadata/qemu_2.7.0.s390x.xml | 11 +++++++ .../qemu_2.8.0-tcg.x86_64.xml | 11 +++++++ .../domaincapsschemadata/qemu_2.8.0.s390x.xml | 11 +++++++ .../qemu_2.8.0.x86_64.xml | 11 +++++++ .../qemu_2.9.0-q35.x86_64.xml | 11 +++++++ .../qemu_2.9.0-tcg.x86_64.xml | 11 +++++++ .../qemu_2.9.0.x86_64.xml | 11 +++++++ .../domaincapsschemadata/qemu_3.0.0.s390x.xml | 11 +++++++ .../qemu_4.0.0.x86_64.xml | 11 +++++++ 19 files changed, 226 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 71d4c01296..46ba5e30b5 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -5165,6 +5165,34 @@ virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPt= r qemuCaps, } =20 =20 +static int +virQEMUCapsFillDomainDeviceRNGCaps(virQEMUCapsPtr qemuCaps, + virDomainCapsDeviceRNGPtr rng) +{ + rng->supported =3D VIR_TRISTATE_BOOL_YES; + rng->model.report =3D true; + rng->backendModel.report =3D true; + + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_RNG)) { + VIR_DOMAIN_CAPS_ENUM_SET(rng->model, VIR_DOMAIN_RNG_MODEL_VIRTIO); + + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_TRANSITIONAL) || + virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY))= { + VIR_DOMAIN_CAPS_ENUM_SET(rng->model, + VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIO= NAL, + VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANS= ITIONAL); + } + } + + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_EGD)) + VIR_DOMAIN_CAPS_ENUM_SET(rng->backendModel, VIR_DOMAIN_RNG_BACKEND= _EGD); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_RANDOM)) + VIR_DOMAIN_CAPS_ENUM_SET(rng->backendModel, VIR_DOMAIN_RNG_BACKEND= _RANDOM); + + return 0; +} + + /** * virQEMUCapsSupportsGICVersion: * @qemuCaps: QEMU capabilities @@ -5306,6 +5334,7 @@ virQEMUCapsFillDomainCaps(virCapsPtr caps, virDomainCapsDeviceHostdevPtr hostdev =3D &domCaps->hostdev; virDomainCapsDeviceGraphicsPtr graphics =3D &domCaps->graphics; virDomainCapsDeviceVideoPtr video =3D &domCaps->video; + virDomainCapsDeviceRNGPtr rng =3D &domCaps->rng; =20 domCaps->maxvcpus =3D virQEMUCapsGetMachineMaxCpus(qemuCaps, domCaps->machine); @@ -5332,6 +5361,7 @@ virQEMUCapsFillDomainCaps(virCapsPtr caps, virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, graphics) < 0 || virQEMUCapsFillDomainDeviceVideoCaps(qemuCaps, video) < 0 || virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev) < 0 || + virQEMUCapsFillDomainDeviceRNGCaps(qemuCaps, rng) < 0 || virQEMUCapsFillDomainFeatureGICCaps(qemuCaps, domCaps) < 0 || virQEMUCapsFillDomainFeatureSEVCaps(qemuCaps, domCaps) < 0) return -1; diff --git a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_1.7.0.x86_64.xml index 497363bbe9..a9b0efdbdb 100644 --- a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml @@ -109,6 +109,15 @@ vfio + + + virtio + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml b/test= s/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml index 7639df44c6..654ce1f538 100644 --- a/tests/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml +++ b/tests/domaincapsschemadata/qemu_2.12.0-virt.aarch64.xml @@ -114,6 +114,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml b/tests/domai= ncapsschemadata/qemu_2.12.0.ppc64.xml index f10d361359..2ac32fcb3b 100644 --- a/tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml +++ b/tests/domaincapsschemadata/qemu_2.12.0.ppc64.xml @@ -80,6 +80,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml b/tests/domai= ncapsschemadata/qemu_2.12.0.s390x.xml index 41a81ff02f..fa377d33a0 100644 --- a/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml +++ b/tests/domaincapsschemadata/qemu_2.12.0.s390x.xml @@ -172,6 +172,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml b/tests/doma= incapsschemadata/qemu_2.12.0.x86_64.xml index 5913e7fc63..712b83f443 100644 --- a/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.12.0.x86_64.xml @@ -142,6 +142,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml b/tests= /domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml index 9ee801092e..26bd16788a 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0-virt.aarch64.xml @@ -111,6 +111,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml b/tests/doma= incapsschemadata/qemu_2.6.0.aarch64.xml index 4dd0b52ed3..3aa5474e64 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml @@ -111,6 +111,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml b/tests/domain= capsschemadata/qemu_2.6.0.ppc64.xml index aa982d237e..cb179b34af 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0.ppc64.xml @@ -84,6 +84,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_2.6.0.x86_64.xml index 6aa3f52ee4..5a675e205f 100644 --- a/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml @@ -116,6 +116,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.7.0.s390x.xml b/tests/domain= capsschemadata/qemu_2.7.0.s390x.xml index 8daa15ab9d..f601922d5e 100644 --- a/tests/domaincapsschemadata/qemu_2.7.0.s390x.xml +++ b/tests/domaincapsschemadata/qemu_2.7.0.s390x.xml @@ -77,6 +77,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml b/tests/d= omaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml index 081805aa4a..4d48e7d251 100644 --- a/tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.8.0-tcg.x86_64.xml @@ -117,6 +117,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml b/tests/domain= capsschemadata/qemu_2.8.0.s390x.xml index 62c51e4087..f18dc262b4 100644 --- a/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml +++ b/tests/domaincapsschemadata/qemu_2.8.0.s390x.xml @@ -158,6 +158,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_2.8.0.x86_64.xml index 1bb034aa4f..46d398949a 100644 --- a/tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.8.0.x86_64.xml @@ -117,6 +117,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml b/tests/d= omaincapsschemadata/qemu_2.9.0-q35.x86_64.xml index 67c6d5e77e..a7392c0929 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0-q35.x86_64.xml @@ -125,6 +125,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml b/tests/d= omaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml index 588ef08199..f94f805b81 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0-tcg.x86_64.xml @@ -149,6 +149,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_2.9.0.x86_64.xml index 598937a971..b0039c8246 100644 --- a/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_2.9.0.x86_64.xml @@ -126,6 +126,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_3.0.0.s390x.xml b/tests/domain= capsschemadata/qemu_3.0.0.s390x.xml index 1d97f1f344..b33ff6a09d 100644 --- a/tests/domaincapsschemadata/qemu_3.0.0.s390x.xml +++ b/tests/domaincapsschemadata/qemu_3.0.0.s390x.xml @@ -178,6 +178,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + diff --git a/tests/domaincapsschemadata/qemu_4.0.0.x86_64.xml b/tests/domai= ncapsschemadata/qemu_4.0.0.x86_64.xml index df66be9e29..7596e414d6 100644 --- a/tests/domaincapsschemadata/qemu_4.0.0.x86_64.xml +++ b/tests/domaincapsschemadata/qemu_4.0.0.x86_64.xml @@ -143,6 +143,17 @@ vfio + + + virtio + virtio-transitional + virtio-non-transitional + + + random + egd + + --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:17:58 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 155442119213868.31309193007382; Thu, 4 Apr 2019 16:39:52 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1B7AD7D0C4; Thu, 4 Apr 2019 23:39:51 +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 E18E3600C5; Thu, 4 Apr 2019 23:39:50 +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 A755A3FB11; Thu, 4 Apr 2019 23:39:50 +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 x34NbfQu011030 for ; Thu, 4 Apr 2019 19:37:41 -0400 Received: by smtp.corp.redhat.com (Postfix) id 43A4F60919; Thu, 4 Apr 2019 23:37:41 +0000 (UTC) Received: from worklaptop.redhat.com (ovpn-124-22.rdu2.redhat.com [10.10.124.22]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6B5A8608E5; Thu, 4 Apr 2019 23:37:40 +0000 (UTC) From: Cole Robinson To: libvirt-list@redhat.com Date: Thu, 4 Apr 2019 19:37:23 -0400 Message-Id: <5b90f49b349c1d9379544a8a091a9d3a0618fc04.1554419814.git.crobinso@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 3/7] qemu: conf: add virQEMUDriverGetDomainCapabilities 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Thu, 04 Apr 2019 23:39:51 +0000 (UTC) Content-Type: text/plain; charset="utf-8" For now it's just a helper for building a qemu virDomainCapsPtr. It will be used in upcoming patches Signed-off-by: Cole Robinson Reviewed-by: Daniel Henrique Barboza --- src/qemu/qemu_conf.c | 39 +++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_conf.h | 7 +++++++ src/qemu/qemu_driver.c | 18 +++--------------- 3 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 41ce0a978d..635fdcc5a4 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1357,6 +1357,45 @@ virCapsPtr virQEMUDriverGetCapabilities(virQEMUDrive= rPtr driver, return ret; } =20 + +/** + * virQEMUDriverGetDomainCapabilities: + * + * Build a virDomainCapsPtr instance for the passed data. + * + * Returns: a reference to a virDomainCapsPtr instance or NULL + */ +virDomainCapsPtr +virQEMUDriverGetDomainCapabilities(virQEMUDriverPtr driver, + virQEMUCapsPtr qemuCaps, + const char *machine, + virArch arch, + virDomainVirtType virttype) +{ + virDomainCapsPtr ret =3D NULL, domCaps =3D NULL; + virCapsPtr caps =3D NULL; + virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + + if (!(caps =3D virQEMUDriverGetCapabilities(driver, false))) + goto cleanup; + + if (!(domCaps =3D virDomainCapsNew(virQEMUCapsGetBinary(qemuCaps), mac= hine, + arch, virttype))) + goto cleanup; + + if (virQEMUCapsFillDomainCaps(caps, domCaps, qemuCaps, + cfg->firmwares, cfg->nfirmwares) < 0) + goto cleanup; + + VIR_STEAL_PTR(ret, domCaps); + cleanup: + virObjectUnref(domCaps); + virObjectUnref(cfg); + virObjectUnref(caps); + return ret; +} + + struct _qemuSharedDeviceEntry { size_t ref; char **domains; /* array of domain names */ diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index 14c9d15a72..ddf5ea4b8f 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -331,6 +331,13 @@ virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriv= erPtr driver); virCapsPtr virQEMUDriverGetCapabilities(virQEMUDriverPtr driver, bool refresh); =20 +virDomainCapsPtr +virQEMUDriverGetDomainCapabilities(virQEMUDriverPtr driver, + virQEMUCapsPtr qemuCaps, + const char *machine, + virArch arch, + virDomainVirtType virttype); + typedef struct _qemuSharedDeviceEntry qemuSharedDeviceEntry; typedef qemuSharedDeviceEntry *qemuSharedDeviceEntryPtr; =20 diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 7e5bbc3cc9..3e8ae8a4dc 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -19829,19 +19829,12 @@ qemuConnectGetDomainCapabilities(virConnectPtr co= nn, virArch arch; virDomainVirtType virttype; virDomainCapsPtr domCaps =3D NULL; - virQEMUDriverConfigPtr cfg =3D NULL; - virCapsPtr caps =3D NULL; =20 virCheckFlags(0, ret); =20 if (virConnectGetDomainCapabilitiesEnsureACL(conn) < 0) return ret; =20 - cfg =3D virQEMUDriverGetConfig(driver); - - if (!(caps =3D virQEMUDriverGetCapabilities(driver, false))) - goto cleanup; - qemuCaps =3D virQEMUCapsCacheLookupDefault(driver->qemuCapsCache, emulatorbin, arch_str, @@ -19851,18 +19844,13 @@ qemuConnectGetDomainCapabilities(virConnectPtr co= nn, if (!qemuCaps) goto cleanup; =20 - if (!(domCaps =3D virDomainCapsNew(virQEMUCapsGetBinary(qemuCaps), mac= hine, - arch, virttype))) - goto cleanup; - - if (virQEMUCapsFillDomainCaps(caps, domCaps, qemuCaps, - cfg->firmwares, cfg->nfirmwares) < 0) + if (!(domCaps =3D virQEMUDriverGetDomainCapabilities(driver, + qemuCaps, machine, + arch, virttype))) goto cleanup; =20 ret =3D virDomainCapsFormat(domCaps); cleanup: - virObjectUnref(cfg); - virObjectUnref(caps); virObjectUnref(domCaps); virObjectUnref(qemuCaps); return ret; --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:17:58 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1554421087690979.676254669218; Thu, 4 Apr 2019 16:38:07 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5BBF53086223; Thu, 4 Apr 2019 23:38:06 +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 2F88E1001E99; Thu, 4 Apr 2019 23:38:06 +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 7EC973FB13; Thu, 4 Apr 2019 23:38:05 +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 x34NbgKT011037 for ; Thu, 4 Apr 2019 19:37:42 -0400 Received: by smtp.corp.redhat.com (Postfix) id 62F0260919; Thu, 4 Apr 2019 23:37:42 +0000 (UTC) Received: from worklaptop.redhat.com (ovpn-124-22.rdu2.redhat.com [10.10.124.22]) by smtp.corp.redhat.com (Postfix) with ESMTP id A362A608E5; Thu, 4 Apr 2019 23:37:41 +0000 (UTC) From: Cole Robinson To: libvirt-list@redhat.com Date: Thu, 4 Apr 2019 19:37:24 -0400 Message-Id: <980d16e0dd03fdebba118fc2ab8a3a0b5dc08b76.1554419814.git.crobinso@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 4/7] qemu: conf: Cache domCaps in qemuCaps 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.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Thu, 04 Apr 2019 23:38:06 +0000 (UTC) Content-Type: text/plain; charset="utf-8" qemuCaps is tied to a binary on disk. domCaps is tied to a combo of binary+machine+arch+virttype values. For the qemu driver this almost entirely translates to a permutation of qemuCaps though Upcoming patches want to use the domCaps data store at XML validate time, but we need to cache the data so we aren't repeatedly regenerating it. Add a domCapsCache hash table to qemuCaps. This ensures that the domCaps cache is blown away whenever qemuCaps needs to be regenerated. Adjust virQEMUDriverGetDomainCapabilities to search the cache and add to it if we don't find a hit. Signed-off-by: Cole Robinson Reviewed-by: Daniel Henrique Barboza --- src/qemu/qemu_capabilities.c | 11 +++++++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_conf.c | 59 +++++++++++++++++++++++++++++++----- 3 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 46ba5e30b5..a3c1348157 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -582,6 +582,7 @@ struct _virQEMUCaps { =20 virArch arch; =20 + virHashTablePtr domCapsCache; virDomainCapsCPUModelsPtr kvmCPUModels; virDomainCapsCPUModelsPtr tcgCPUModels; =20 @@ -1476,6 +1477,9 @@ virQEMUCapsNew(void) if (!(qemuCaps->flags =3D virBitmapNew(QEMU_CAPS_LAST))) goto error; =20 + if (!(qemuCaps->domCapsCache =3D virHashCreate(5, virObjectFreeHashDat= a))) + goto error; + return qemuCaps; =20 error: @@ -1628,6 +1632,7 @@ void virQEMUCapsDispose(void *obj) } VIR_FREE(qemuCaps->machineTypes); =20 + virHashFree(qemuCaps->domCapsCache); virObjectUnref(qemuCaps->kvmCPUModels); virObjectUnref(qemuCaps->tcgCPUModels); =20 @@ -1790,6 +1795,12 @@ const char *virQEMUCapsGetPackage(virQEMUCapsPtr qem= uCaps) } =20 =20 +virHashTablePtr virQEMUCapsGetDomainCapsCache(virQEMUCapsPtr qemuCaps) +{ + return qemuCaps->domCapsCache; +} + + int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainVirtType type, diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index c6f6980684..2a37f0c2ff 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -538,6 +538,7 @@ const char *virQEMUCapsGetBinary(virQEMUCapsPtr qemuCap= s); virArch virQEMUCapsGetArch(virQEMUCapsPtr qemuCaps); unsigned int virQEMUCapsGetVersion(virQEMUCapsPtr qemuCaps); const char *virQEMUCapsGetPackage(virQEMUCapsPtr qemuCaps); +virHashTablePtr virQEMUCapsGetDomainCapsCache(virQEMUCapsPtr qemuCaps); unsigned int virQEMUCapsGetKVMVersion(virQEMUCapsPtr qemuCaps); int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps, virDomainVirtType type, diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 635fdcc5a4..6a7c183075 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1358,10 +1358,39 @@ virCapsPtr virQEMUDriverGetCapabilities(virQEMUDriv= erPtr driver, } =20 =20 +struct virQEMUDriverSearchDomcapsData { + const char *path; + const char *machine; + virArch arch; + virDomainVirtType virttype; +}; + + +static int +virQEMUDriverSearchDomcaps(const void *payload, + const void *name ATTRIBUTE_UNUSED, + const void *opaque) +{ + virDomainCapsPtr domCaps =3D (virDomainCapsPtr) payload; + struct virQEMUDriverSearchDomcapsData *data =3D (struct virQEMUDriverS= earchDomcapsData *) opaque; + + if (STREQ_NULLABLE(data->path, domCaps->path) && + STREQ_NULLABLE(data->machine, domCaps->machine) && + data->arch =3D=3D domCaps->arch && + data->virttype =3D=3D domCaps->virttype) + return 1; + + return 0; +} + /** * virQEMUDriverGetDomainCapabilities: * - * Build a virDomainCapsPtr instance for the passed data. + * Get a reference to the virDomainCapsPtr instance from the virQEMUCapsPtr + * domCapsCache. If there's no domcaps in the cache, create a new instance, + * add it to the cache, and return a reference. + * + * The caller must release the reference with virObjetUnref * * Returns: a reference to a virDomainCapsPtr instance or NULL */ @@ -1375,18 +1404,34 @@ virQEMUDriverGetDomainCapabilities(virQEMUDriverPtr= driver, virDomainCapsPtr ret =3D NULL, domCaps =3D NULL; virCapsPtr caps =3D NULL; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + virHashTablePtr domCapsCache =3D virQEMUCapsGetDomainCapsCache(qemuCap= s); + struct virQEMUDriverSearchDomcapsData data =3D { + .path =3D virQEMUCapsGetBinary(qemuCaps), + .machine =3D machine, + .arch =3D arch, + .virttype =3D virttype, + }; =20 if (!(caps =3D virQEMUDriverGetCapabilities(driver, false))) goto cleanup; =20 - if (!(domCaps =3D virDomainCapsNew(virQEMUCapsGetBinary(qemuCaps), mac= hine, - arch, virttype))) - goto cleanup; + domCaps =3D virHashSearch(domCapsCache, + virQEMUDriverSearchDomcaps, &data, NULL); + if (!domCaps) { + /* hash miss, build new domcaps */ + if (!(domCaps =3D virDomainCapsNew(data.path, data.machine, + data.arch, data.virttype))) + goto cleanup; =20 - if (virQEMUCapsFillDomainCaps(caps, domCaps, qemuCaps, - cfg->firmwares, cfg->nfirmwares) < 0) - goto cleanup; + if (virQEMUCapsFillDomainCaps(caps, domCaps, qemuCaps, + cfg->firmwares, cfg->nfirmwares) < 0) + goto cleanup; + + if (virHashAddEntry(domCapsCache, machine, domCaps) < 0) + goto cleanup; + } =20 + virObjectRef(domCaps); VIR_STEAL_PTR(ret, domCaps); cleanup: virObjectUnref(domCaps); --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:17:58 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1554421106977860.4456164066836; Thu, 4 Apr 2019 16:38:26 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D7C27307D9D0; Thu, 4 Apr 2019 23:38:25 +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 ABE5F19C67; Thu, 4 Apr 2019 23:38:25 +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 6D2F2181AC43; Thu, 4 Apr 2019 23:38:25 +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 x34Nbhs2011047 for ; Thu, 4 Apr 2019 19:37:43 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9951960925; Thu, 4 Apr 2019 23:37:43 +0000 (UTC) Received: from worklaptop.redhat.com (ovpn-124-22.rdu2.redhat.com [10.10.124.22]) by smtp.corp.redhat.com (Postfix) with ESMTP id C316A6091F; Thu, 4 Apr 2019 23:37:42 +0000 (UTC) From: Cole Robinson To: libvirt-list@redhat.com Date: Thu, 4 Apr 2019 19:37:25 -0400 Message-Id: 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 5/7] conf: domcaps: Add virDomainCapsDeviceDefValidate 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.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Thu, 04 Apr 2019 23:38:26 +0000 (UTC) Content-Type: text/plain; charset="utf-8" This is an entrypoint to validate a virDomainDeviceDef against values filled into virDomainCaps. Currently it's just a stub Signed-off-by: Cole Robinson --- src/conf/domain_capabilities.c | 40 ++++++++++++++++++++++++++++++++++ src/conf/domain_capabilities.h | 4 ++++ src/libvirt_private.syms | 1 + 3 files changed, 45 insertions(+) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index 03757ba8cd..aef5703df6 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -20,6 +20,7 @@ =20 #include =20 +#include "device_conf.h" #include "domain_capabilities.h" #include "domain_conf.h" #include "viralloc.h" @@ -656,3 +657,42 @@ virDomainCapsFormat(virDomainCapsPtr const caps) virBufferCheckError(&buf); return virBufferContentAndReset(&buf); } + + +int +virDomainCapsDeviceDefValidate(virDomainCapsPtr const caps ATTRIBUTE_UNUSE= D, + const virDomainDeviceDef *dev, + const virDomainDef *def ATTRIBUTE_UNUSED) +{ + switch ((virDomainDeviceType) dev->type) { + case VIR_DOMAIN_DEVICE_DISK: + case VIR_DOMAIN_DEVICE_REDIRDEV: + case VIR_DOMAIN_DEVICE_NET: + case VIR_DOMAIN_DEVICE_CONTROLLER: + case VIR_DOMAIN_DEVICE_CHR: + case VIR_DOMAIN_DEVICE_SMARTCARD: + case VIR_DOMAIN_DEVICE_RNG: + case VIR_DOMAIN_DEVICE_HOSTDEV: + case VIR_DOMAIN_DEVICE_VIDEO: + case VIR_DOMAIN_DEVICE_MEMORY: + case VIR_DOMAIN_DEVICE_VSOCK: + case VIR_DOMAIN_DEVICE_INPUT: + case VIR_DOMAIN_DEVICE_SHMEM: + case VIR_DOMAIN_DEVICE_LEASE: + case VIR_DOMAIN_DEVICE_FS: + case VIR_DOMAIN_DEVICE_SOUND: + case VIR_DOMAIN_DEVICE_WATCHDOG: + case VIR_DOMAIN_DEVICE_GRAPHICS: + case VIR_DOMAIN_DEVICE_HUB: + case VIR_DOMAIN_DEVICE_MEMBALLOON: + case VIR_DOMAIN_DEVICE_NVRAM: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: + case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_LAST: + break; + } + + return 0; +} diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index 052191d284..ffce2c2964 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -223,6 +223,10 @@ void virDomainCapsEnumClear(virDomainCapsEnumPtr capsE= num); =20 char * virDomainCapsFormat(virDomainCapsPtr const caps); =20 +int virDomainCapsDeviceDefValidate(virDomainCapsPtr const caps, + const virDomainDeviceDef *dev, + const virDomainDef *def); + void virSEVCapabilitiesFree(virSEVCapability *capabilities); =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 212adf53c1..231b487ab0 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -185,6 +185,7 @@ virDomainCapsCPUModelsGet; virDomainCapsCPUModelsNew; virDomainCapsCPUUsableTypeFromString; virDomainCapsCPUUsableTypeToString; +virDomainCapsDeviceDefValidate; virDomainCapsEnumClear; virDomainCapsEnumSet; virDomainCapsFormat; --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:17:58 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1554421110309836.0893408631667; Thu, 4 Apr 2019 16:38:30 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3BC3019CBCD; Thu, 4 Apr 2019 23:38:29 +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 17A831001E99; Thu, 4 Apr 2019 23:38:29 +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 D45E33FB16; Thu, 4 Apr 2019 23:38:28 +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 x34Nbih1011064 for ; Thu, 4 Apr 2019 19:37:44 -0400 Received: by smtp.corp.redhat.com (Postfix) id D458660922; Thu, 4 Apr 2019 23:37:44 +0000 (UTC) Received: from worklaptop.redhat.com (ovpn-124-22.rdu2.redhat.com [10.10.124.22]) by smtp.corp.redhat.com (Postfix) with ESMTP id 062B96092D; Thu, 4 Apr 2019 23:37:43 +0000 (UTC) From: Cole Robinson To: libvirt-list@redhat.com Date: Thu, 4 Apr 2019 19:37:26 -0400 Message-Id: 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 6/7] qemu: domain: Call virDomainCapsDeviceDefValidate 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.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 04 Apr 2019 23:38:29 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Fill in virDomainCaps at Validate time and use it to call virDomainCapsDeviceDefValidate Signed-off-by: Cole Robinson --- src/qemu/qemu_domain.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index f0bf1aa4fe..6da27a79b0 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -41,6 +41,7 @@ #include "viruuid.h" #include "virfile.h" #include "domain_addr.h" +#include "domain_capabilities.h" #include "domain_event.h" #include "virtime.h" #include "virnetdevopenvswitch.h" @@ -6119,14 +6120,24 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDe= f *dev, int ret =3D 0; virQEMUDriverPtr driver =3D opaque; virQEMUCapsPtr qemuCaps =3D NULL; + virDomainCapsPtr domCaps =3D NULL; =20 if (!(qemuCaps =3D virQEMUCapsCacheLookup(driver->qemuCapsCache, def->emulator))) return -1; =20 + if (!(domCaps =3D virQEMUDriverGetDomainCapabilities(driver, qemuCaps, + def->os.machine, + def->os.arch, + def->virtType))) + goto cleanup; + if ((ret =3D qemuDomainDeviceDefValidateAddress(dev, qemuCaps)) < 0) goto cleanup; =20 + if (virDomainCapsDeviceDefValidate(domCaps, dev, def) < 0) + goto cleanup; + switch ((virDomainDeviceType)dev->type) { case VIR_DOMAIN_DEVICE_NET: ret =3D qemuDomainDeviceDefValidateNetwork(dev->data.net); @@ -6207,6 +6218,7 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef = *dev, =20 cleanup: virObjectUnref(qemuCaps); + virObjectUnref(domCaps); return ret; } =20 --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:17:58 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1554421196251766.9530638030029; Thu, 4 Apr 2019 16:39:56 -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 274DF99DD7; Thu, 4 Apr 2019 23:39:55 +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 0003780FE; Thu, 4 Apr 2019 23:39:54 +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 B9207181AC44; Thu, 4 Apr 2019 23:39:54 +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 x34Nbk5s011070 for ; Thu, 4 Apr 2019 19:37:46 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1679460919; Thu, 4 Apr 2019 23:37:46 +0000 (UTC) Received: from worklaptop.redhat.com (ovpn-124-22.rdu2.redhat.com [10.10.124.22]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3DE91608E5; Thu, 4 Apr 2019 23:37:45 +0000 (UTC) From: Cole Robinson To: libvirt-list@redhat.com Date: Thu, 4 Apr 2019 19:37:27 -0400 Message-Id: <72fe0785355cf6a844416218dfba1d6aeaaba5bb.1554419814.git.crobinso@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 7/7] qemu: Move rng model validation to domcaps 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.38]); Thu, 04 Apr 2019 23:39:55 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The qemu driver already does some model validation, based on qemuCaps. However, the logic for exposing model values in domcaps is basically identical. This drops the qemuCaps checking and compares against the domCaps data directly. This approach makes it basically impossible to add a new model to the qemu driver without extending domcaps. The validation can also be shared with other drivers eventually. Signed-off-by: Cole Robinson --- src/conf/domain_capabilities.c | 35 +++++++++++++++++++++++++++++++--- src/conf/domain_capabilities.h | 1 + src/qemu/qemu_domain.c | 26 +------------------------ 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c index aef5703df6..977f15b9ed 100644 --- a/src/conf/domain_capabilities.c +++ b/src/conf/domain_capabilities.c @@ -659,19 +659,48 @@ virDomainCapsFormat(virDomainCapsPtr const caps) } =20 =20 +#define ENUM_VALUE_MISSING(capsEnum, value) !(capsEnum.values & (1 << valu= e)) + +#define ENUM_VALUE_ERROR(valueLabel, valueString) \ + do { \ + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \ + _("domain configuration does not support '%s' value= '%s'"), \ + valueLabel, valueString); \ + } while (0) + + +static int +virDomainCapsDeviceRNGDefValidate(virDomainCapsPtr const caps, + const virDomainRNGDef *dev) +{ + if (ENUM_VALUE_MISSING(caps->rng.model, dev->model)) { + ENUM_VALUE_ERROR("rng model", + virDomainRNGModelTypeToString(dev->model)); + return -1; + } + + return 0; +} + + int -virDomainCapsDeviceDefValidate(virDomainCapsPtr const caps ATTRIBUTE_UNUSE= D, +virDomainCapsDeviceDefValidate(virDomainCapsPtr const caps, const virDomainDeviceDef *dev, const virDomainDef *def ATTRIBUTE_UNUSED) { + int ret =3D 0; + switch ((virDomainDeviceType) dev->type) { + case VIR_DOMAIN_DEVICE_RNG: + ret =3D virDomainCapsDeviceRNGDefValidate(caps, dev->data.rng); + break; + case VIR_DOMAIN_DEVICE_DISK: case VIR_DOMAIN_DEVICE_REDIRDEV: case VIR_DOMAIN_DEVICE_NET: case VIR_DOMAIN_DEVICE_CONTROLLER: case VIR_DOMAIN_DEVICE_CHR: case VIR_DOMAIN_DEVICE_SMARTCARD: - case VIR_DOMAIN_DEVICE_RNG: case VIR_DOMAIN_DEVICE_HOSTDEV: case VIR_DOMAIN_DEVICE_VIDEO: case VIR_DOMAIN_DEVICE_MEMORY: @@ -694,5 +723,5 @@ virDomainCapsDeviceDefValidate(virDomainCapsPtr const c= aps ATTRIBUTE_UNUSED, break; } =20 - return 0; + return ret; } diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h index ffce2c2964..997c7d9444 100644 --- a/src/conf/domain_capabilities.h +++ b/src/conf/domain_capabilities.h @@ -215,6 +215,7 @@ virDomainCapsCPUModelsGet(virDomainCapsCPUModelsPtr cpu= Models, __nvalues, __values); \ } while (0) =20 + int virDomainCapsEnumSet(virDomainCapsEnumPtr capsEnum, const char *capsEnumName, size_t nvalues, diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 6da27a79b0..cad08439b1 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4523,36 +4523,12 @@ qemuDomainSmartcardDefValidate(const virDomainSmart= cardDef *def) =20 static int qemuDomainRNGDefValidate(const virDomainRNGDef *def, - virQEMUCapsPtr qemuCaps) + virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED) { - bool modelIsSupported =3D false; - if (def->backend =3D=3D VIR_DOMAIN_RNG_BACKEND_EGD && qemuDomainChrSourceDefValidate(def->source.chardev) < 0) return -1; =20 - switch ((virDomainRNGModel) def->model) { - case VIR_DOMAIN_RNG_MODEL_VIRTIO: - modelIsSupported =3D virQEMUCapsGet(qemuCaps, - QEMU_CAPS_DEVICE_VIRTIO_RNG); - break; - case VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL: - case VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL: - modelIsSupported =3D (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VI= RTIO_RNG) && - (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI= _TRANSITIONAL) || - virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI= _DISABLE_LEGACY))); - break; - case VIR_DOMAIN_RNG_MODEL_LAST: - break; - } - - if (!modelIsSupported) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("this qemu doesn't support RNG device type '%s'"), - virDomainRNGModelTypeToString(def->model)); - return -1; - } - return 0; } =20 --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list