From nobody Fri May 3 23:47:13 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 1536236576103303.6752390797477; Thu, 6 Sep 2018 05:22:56 -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 733D3C0587EA; Thu, 6 Sep 2018 12:22:54 +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 3724A17267; Thu, 6 Sep 2018 12:22: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 D9D4A24F5B; Thu, 6 Sep 2018 12:22:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w86CMQaF006799 for ; Thu, 6 Sep 2018 08:22:26 -0400 Received: by smtp.corp.redhat.com (Postfix) id 30A9D10FD2B7; Thu, 6 Sep 2018 12:22:26 +0000 (UTC) Received: from inaba.usersys.redhat.com (unknown [10.43.2.44]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BC07A10FD2B6 for ; Thu, 6 Sep 2018 12:22:25 +0000 (UTC) From: Andrea Bolognani To: libvir-list@redhat.com Date: Thu, 6 Sep 2018 14:22:13 +0200 Message-Id: <20180906122219.15056-2-abologna@redhat.com> In-Reply-To: <20180906122219.15056-1-abologna@redhat.com> References: <20180906122219.15056-1-abologna@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 1/7] tests: Add missing virtio-input capabilities 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.32]); Thu, 06 Sep 2018 12:22:55 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" A few qemuxml2xml tests for virtio-input devices are missing the capabilities used for the corresponding qemuxml2argv tests: this wasn't a problem until now because capabilities were only checked at command line generation time, but we're going to change that later. Signed-off-by: Andrea Bolognani Reviewed-by: J=EF=BF=BDn Tomko --- tests/qemuxml2xmltest.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 47da7a7201..caf79625d4 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -1098,12 +1098,30 @@ mymain(void) DO_TEST("video-virtio-gpu-virgl", NONE); DO_TEST("video-virtio-gpu-spice-gl", NONE); DO_TEST("video-virtio-gpu-sdl-gl", NONE); - DO_TEST("virtio-input", NONE); - DO_TEST("virtio-input-passthrough", NONE); + + DO_TEST("virtio-input", + QEMU_CAPS_VIRTIO_KEYBOARD, + QEMU_CAPS_VIRTIO_MOUSE, + QEMU_CAPS_VIRTIO_TABLET); + DO_TEST("virtio-input-passthrough", + QEMU_CAPS_VIRTIO_INPUT_HOST); =20 DO_TEST("memorybacking-set", NONE); DO_TEST("memorybacking-unset", NONE); - DO_TEST("virtio-options", QEMU_CAPS_VIRTIO_SCSI); + + DO_TEST("virtio-options", + QEMU_CAPS_VIRTIO_SCSI, + QEMU_CAPS_VIRTIO_KEYBOARD, + QEMU_CAPS_VIRTIO_MOUSE, + QEMU_CAPS_VIRTIO_TABLET, + QEMU_CAPS_VIRTIO_INPUT_HOST, + QEMU_CAPS_DEVICE_VIRTIO_GPU, + QEMU_CAPS_VIRTIO_GPU_VIRGL, + QEMU_CAPS_DEVICE_VIRTIO_RNG, + QEMU_CAPS_OBJECT_RNG_RANDOM, + QEMU_CAPS_DEVICE_VIDEO_PRIMARY, + QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM, + QEMU_CAPS_VIRTIO_PCI_ATS); =20 virObjectUnref(cfg); =20 --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 3 23:47:13 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 1536236553270945.648488559163; Thu, 6 Sep 2018 05:22:33 -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 5CCB8307D845; Thu, 6 Sep 2018 12:22:31 +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 DAFD82AAA8; Thu, 6 Sep 2018 12:22:30 +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 10172181A130; Thu, 6 Sep 2018 12:22:29 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w86CMQfl006809 for ; Thu, 6 Sep 2018 08:22:27 -0400 Received: by smtp.corp.redhat.com (Postfix) id CCAC210FD2B7; Thu, 6 Sep 2018 12:22:26 +0000 (UTC) Received: from inaba.usersys.redhat.com (unknown [10.43.2.44]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6D59710FD2B6 for ; Thu, 6 Sep 2018 12:22:26 +0000 (UTC) From: Andrea Bolognani To: libvir-list@redhat.com Date: Thu, 6 Sep 2018 14:22:14 +0200 Message-Id: <20180906122219.15056-3-abologna@redhat.com> In-Reply-To: <20180906122219.15056-1-abologna@redhat.com> References: <20180906122219.15056-1-abologna@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 2/7] qemu: Check type range for virtio-input devices 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.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, 06 Sep 2018 12:22:31 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Andrea Bolognani Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_command.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 877269f52e..72d8bb4cf6 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4096,7 +4096,10 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, virQEMUBuildBufferEscapeComma(&buf, dev->source.evdev); break; case VIR_DOMAIN_INPUT_TYPE_LAST: - break; + default: + virReportEnumRangeError(virDomainInputType, + dev->type); + goto error; } =20 if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0) --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 3 23:47:13 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 1536236553392789.8470714125453; Thu, 6 Sep 2018 05:22:33 -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 83B6B5D669; Thu, 6 Sep 2018 12:22:31 +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 EE6285C8BD; Thu, 6 Sep 2018 12:22:30 +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 D1C40181A12E; Thu, 6 Sep 2018 12:22:28 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w86CMRZI006814 for ; Thu, 6 Sep 2018 08:22:27 -0400 Received: by smtp.corp.redhat.com (Postfix) id 74BAF10075E5; Thu, 6 Sep 2018 12:22:27 +0000 (UTC) Received: from inaba.usersys.redhat.com (unknown [10.43.2.44]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1559810FD2B6 for ; Thu, 6 Sep 2018 12:22:26 +0000 (UTC) From: Andrea Bolognani To: libvir-list@redhat.com Date: Thu, 6 Sep 2018 14:22:15 +0200 Message-Id: <20180906122219.15056-4-abologna@redhat.com> In-Reply-To: <20180906122219.15056-1-abologna@redhat.com> References: <20180906122219.15056-1-abologna@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 3/7] qemu: Remove duplicated option formatting for virtio devices 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.39]); Thu, 06 Sep 2018 12:22:32 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" There are several functions where we pointlessly duplicate parts of the format string and pass the same arguments: refactor them so that the common parts are formatted separately from the variable parts. Signed-off-by: Andrea Bolognani Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_command.c | 42 ++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 72d8bb4cf6..b283f7ca83 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2004,8 +2004,6 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, case VIR_DOMAIN_DISK_BUS_VIRTIO: if (disk->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { virBufferAddLit(&opt, "virtio-blk-ccw"); - if (disk->iothread) - virBufferAsprintf(&opt, ",iothread=3Diothread%u", disk->io= thread); } else if (disk->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390) { virBufferAddLit(&opt, "virtio-blk-s390"); @@ -2014,9 +2012,14 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, virBufferAddLit(&opt, "virtio-blk-device"); } else { virBufferAddLit(&opt, "virtio-blk-pci"); - if (disk->iothread) - virBufferAsprintf(&opt, ",iothread=3Diothread%u", disk->io= thread); } + + if (disk->iothread && + (disk->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW || + disk->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI)) { + virBufferAsprintf(&opt, ",iothread=3Diothread%u", disk->iothre= ad); + } + qemuBuildIoEventFdStr(&opt, disk->ioeventfd, qemuCaps); if (disk->event_idx && virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_BLK_EVENT_IDX)) { @@ -4064,7 +4067,7 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, _("virtio-mouse is not supported by this QEMU b= inary")); goto error; } - virBufferAsprintf(&buf, "virtio-mouse%s,id=3D%s", suffix, dev->inf= o.alias); + virBufferAsprintf(&buf, "virtio-mouse%s", suffix); break; case VIR_DOMAIN_INPUT_TYPE_TABLET: if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_TABLET) || @@ -4074,7 +4077,7 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, _("virtio-tablet is not supported by this QEMU = binary")); goto error; } - virBufferAsprintf(&buf, "virtio-tablet%s,id=3D%s", suffix, dev->in= fo.alias); + virBufferAsprintf(&buf, "virtio-tablet%s", suffix); break; case VIR_DOMAIN_INPUT_TYPE_KBD: if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_KEYBOARD) || @@ -4084,7 +4087,7 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, _("virtio-keyboard is not supported by this QEM= U binary")); goto error; } - virBufferAsprintf(&buf, "virtio-keyboard%s,id=3D%s", suffix, dev->= info.alias); + virBufferAsprintf(&buf, "virtio-keyboard%s", suffix); break; case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_INPUT_HOST)) { @@ -4092,8 +4095,7 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, _("virtio-input-host is not supported by this Q= EMU binary")); goto error; } - virBufferAsprintf(&buf, "virtio-input-host%s,id=3D%s,evdev=3D", su= ffix, dev->info.alias); - virQEMUBuildBufferEscapeComma(&buf, dev->source.evdev); + virBufferAsprintf(&buf, "virtio-input-host%s", suffix); break; case VIR_DOMAIN_INPUT_TYPE_LAST: default: @@ -4102,6 +4104,13 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, goto error; } =20 + virBufferAsprintf(&buf, ",id=3D%s", dev->info.alias); + + if (dev->type =3D=3D VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH) { + virBufferAddLit(&buf, ",evdev=3D"); + virQEMUBuildBufferEscapeComma(&buf, dev->source.evdev); + } + if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0) goto error; =20 @@ -5834,17 +5843,16 @@ qemuBuildRNGDevStr(const virDomainDef *def, goto error; =20 if (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) - virBufferAsprintf(&buf, "virtio-rng-ccw,rng=3Dobj%s,id=3D%s", - dev->info.alias, dev->info.alias); + virBufferAddLit(&buf, "virtio-rng-ccw"); else if (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S= 390) - virBufferAsprintf(&buf, "virtio-rng-s390,rng=3Dobj%s,id=3D%s", - dev->info.alias, dev->info.alias); + virBufferAddLit(&buf, "virtio-rng-s390"); else if (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_M= MIO) - virBufferAsprintf(&buf, "virtio-rng-device,rng=3Dobj%s,id=3D%s", - dev->info.alias, dev->info.alias); + virBufferAddLit(&buf, "virtio-rng-device"); else - virBufferAsprintf(&buf, "virtio-rng-pci,rng=3Dobj%s,id=3D%s", - dev->info.alias, dev->info.alias); + virBufferAddLit(&buf, "virtio-rng-pci"); + + virBufferAsprintf(&buf, ",rng=3Dobj%s,id=3D%s", + dev->info.alias, dev->info.alias); =20 if (dev->rate > 0) { virBufferAsprintf(&buf, ",max-bytes=3D%u", dev->rate); --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 3 23:47:13 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 1536236576754738.8784038307027; Thu, 6 Sep 2018 05:22:56 -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 645A0317C3F3; Thu, 6 Sep 2018 12:22:54 +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 2978317DCC; Thu, 6 Sep 2018 12:22: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 D1F264BB7F; Thu, 6 Sep 2018 12:22:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w86CMSNs006827 for ; Thu, 6 Sep 2018 08:22:28 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1D5C910FD2B6; Thu, 6 Sep 2018 12:22:28 +0000 (UTC) Received: from inaba.usersys.redhat.com (unknown [10.43.2.44]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B1BE910075F6 for ; Thu, 6 Sep 2018 12:22:27 +0000 (UTC) From: Andrea Bolognani To: libvir-list@redhat.com Date: Thu, 6 Sep 2018 14:22:16 +0200 Message-Id: <20180906122219.15056-5-abologna@redhat.com> In-Reply-To: <20180906122219.15056-1-abologna@redhat.com> References: <20180906122219.15056-1-abologna@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 4/7] qemu: Always format iothread for virtio-blk 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.41]); Thu, 06 Sep 2018 12:22:55 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" So far we've only formatted it for virtio-blk-pci and virtio-blk-ccw, but other virtio-blk devices also support the corresponding option; moreover, we've always formatted it for all virtio-scsi devices. Signed-off-by: Andrea Bolognani Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_command.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b283f7ca83..e5743fad9d 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2014,11 +2014,8 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, virBufferAddLit(&opt, "virtio-blk-pci"); } =20 - if (disk->iothread && - (disk->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW || - disk->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI)) { + if (disk->iothread) virBufferAsprintf(&opt, ",iothread=3Diothread%u", disk->iothre= ad); - } =20 qemuBuildIoEventFdStr(&opt, disk->ioeventfd, qemuCaps); if (disk->event_idx && --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 3 23:47:13 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 1536236580629971.9048433679635; Thu, 6 Sep 2018 05:23:00 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 89CBB30001D4; Thu, 6 Sep 2018 12:22:58 +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 4CF763091381; Thu, 6 Sep 2018 12:22:58 +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 05D23181A13A; Thu, 6 Sep 2018 12:22:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w86CMSgw006834 for ; Thu, 6 Sep 2018 08:22:28 -0400 Received: by smtp.corp.redhat.com (Postfix) id B8FC910FD2B6; Thu, 6 Sep 2018 12:22:28 +0000 (UTC) Received: from inaba.usersys.redhat.com (unknown [10.43.2.44]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 59A5910FD2B7 for ; Thu, 6 Sep 2018 12:22:28 +0000 (UTC) From: Andrea Bolognani To: libvir-list@redhat.com Date: Thu, 6 Sep 2018 14:22:17 +0200 Message-Id: <20180906122219.15056-6-abologna@redhat.com> In-Reply-To: <20180906122219.15056-1-abologna@redhat.com> References: <20180906122219.15056-1-abologna@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 5/7] qemu: Check for virtio-input capabilites at validate 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.84 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.46]); Thu, 06 Sep 2018 12:22:59 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The appropriate time to ensure the required capabilities are present is validate rather than command line generation: add a new qemuDomainDeviceDefValidateInput() function and move all existing checks there. Signed-off-by: Andrea Bolognani Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_command.c | 26 ------------------ src/qemu/qemu_domain.c | 59 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 27 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index e5743fad9d..db7c3ad698 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4057,41 +4057,15 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, =20 switch ((virDomainInputType)dev->type) { case VIR_DOMAIN_INPUT_TYPE_MOUSE: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_MOUSE) || - (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MOUSE_CCW))= ) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtio-mouse is not supported by this QEMU b= inary")); - goto error; - } virBufferAsprintf(&buf, "virtio-mouse%s", suffix); break; case VIR_DOMAIN_INPUT_TYPE_TABLET: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_TABLET) || - (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_TABLET_CCW)= )) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtio-tablet is not supported by this QEMU = binary")); - goto error; - } virBufferAsprintf(&buf, "virtio-tablet%s", suffix); break; case VIR_DOMAIN_INPUT_TYPE_KBD: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_KEYBOARD) || - (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_KEYBOARD_CC= W))) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtio-keyboard is not supported by this QEM= U binary")); - goto error; - } virBufferAsprintf(&buf, "virtio-keyboard%s", suffix); break; case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_INPUT_HOST)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtio-input-host is not supported by this Q= EMU binary")); - goto error; - } virBufferAsprintf(&buf, "virtio-input-host%s", suffix); break; case VIR_DOMAIN_INPUT_TYPE_LAST: diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index f161cf6c84..05e90c3615 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5727,6 +5727,60 @@ qemuDomainDeviceDefValidateGraphics(const virDomainG= raphicsDef *graphics, } =20 =20 +static int +qemuDomainDeviceDefValidateInput(const virDomainInputDef *input, + const virDomainDef *def ATTRIBUTE_UNUSED, + virQEMUCapsPtr qemuCaps) +{ + if (input->bus !=3D VIR_DOMAIN_INPUT_BUS_VIRTIO) + return 0; + + switch ((virDomainInputType)input->type) { + case VIR_DOMAIN_INPUT_TYPE_MOUSE: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_MOUSE) || + (input->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MOUSE_CCW))= ) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("virtio-mouse is not supported by this QEMU b= inary")); + return -1; + } + break; + case VIR_DOMAIN_INPUT_TYPE_TABLET: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_TABLET) || + (input->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_TABLET_CCW)= )) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("virtio-tablet is not supported by this QEMU = binary")); + return -1; + } + break; + case VIR_DOMAIN_INPUT_TYPE_KBD: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_KEYBOARD) || + (input->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_KEYBOARD_CC= W))) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("virtio-keyboard is not supported by this QEM= U binary")); + return -1; + } + break; + case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_INPUT_HOST)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("virtio-input-host is not supported by this Q= EMU binary")); + return -1; + } + break; + case VIR_DOMAIN_INPUT_TYPE_LAST: + default: + virReportEnumRangeError(virDomainInputType, + input->type); + return -1; + } + + return 0; +} + + static int qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, const virDomainDef *def, @@ -5796,9 +5850,12 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef= *dev, qemuCaps); break; =20 + case VIR_DOMAIN_DEVICE_INPUT: + ret =3D qemuDomainDeviceDefValidateInput(dev->data.input, def, qem= uCaps); + break; + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_FS: - case VIR_DOMAIN_DEVICE_INPUT: case VIR_DOMAIN_DEVICE_SOUND: case VIR_DOMAIN_DEVICE_HUB: case VIR_DOMAIN_DEVICE_MEMBALLOON: --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 3 23:47:13 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 1536236575946428.54974877796826; Thu, 6 Sep 2018 05:22:55 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7EBE13082137; Thu, 6 Sep 2018 12:22:54 +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 4CB7F20156DC; Thu, 6 Sep 2018 12:22: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 E4A7A24F5C; Thu, 6 Sep 2018 12:22:53 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w86CMT7V006842 for ; Thu, 6 Sep 2018 08:22:29 -0400 Received: by smtp.corp.redhat.com (Postfix) id 64CCE10FD2B6; Thu, 6 Sep 2018 12:22:29 +0000 (UTC) Received: from inaba.usersys.redhat.com (unknown [10.43.2.44]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 04E6C10FD2B7 for ; Thu, 6 Sep 2018 12:22:28 +0000 (UTC) From: Andrea Bolognani To: libvir-list@redhat.com Date: Thu, 6 Sep 2018 14:22:18 +0200 Message-Id: <20180906122219.15056-7-abologna@redhat.com> In-Reply-To: <20180906122219.15056-1-abologna@redhat.com> References: <20180906122219.15056-1-abologna@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 6/7] qemu: Refactor virtio-input capabilities 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.84 on 10.5.11.25 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Thu, 06 Sep 2018 12:22:55 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The checks and error messages are mostly the same across all virtio-input devices, so we can avoid having multiple copies of the same code. Signed-off-by: Andrea Bolognani Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_domain.c | 51 +++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 05e90c3615..cd4e78993f 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5732,43 +5732,33 @@ qemuDomainDeviceDefValidateInput(const virDomainInp= utDef *input, const virDomainDef *def ATTRIBUTE_UNUSED, virQEMUCapsPtr qemuCaps) { + const char *baseName; + int cap; + int ccwCap; + if (input->bus !=3D VIR_DOMAIN_INPUT_BUS_VIRTIO) return 0; =20 switch ((virDomainInputType)input->type) { case VIR_DOMAIN_INPUT_TYPE_MOUSE: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_MOUSE) || - (input->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MOUSE_CCW))= ) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtio-mouse is not supported by this QEMU b= inary")); - return -1; - } + baseName =3D "virtio-mouse"; + cap =3D QEMU_CAPS_VIRTIO_MOUSE; + ccwCap =3D QEMU_CAPS_DEVICE_VIRTIO_MOUSE_CCW; break; case VIR_DOMAIN_INPUT_TYPE_TABLET: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_TABLET) || - (input->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_TABLET_CCW)= )) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtio-tablet is not supported by this QEMU = binary")); - return -1; - } + baseName =3D "virtio-tablet"; + cap =3D QEMU_CAPS_VIRTIO_TABLET; + ccwCap =3D QEMU_CAPS_DEVICE_VIRTIO_TABLET_CCW; break; case VIR_DOMAIN_INPUT_TYPE_KBD: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_KEYBOARD) || - (input->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_KEYBOARD_CC= W))) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtio-keyboard is not supported by this QEM= U binary")); - return -1; - } + baseName =3D "virtio-keyboard"; + cap =3D QEMU_CAPS_VIRTIO_KEYBOARD; + ccwCap =3D QEMU_CAPS_DEVICE_VIRTIO_KEYBOARD_CCW; break; case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_INPUT_HOST)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("virtio-input-host is not supported by this Q= EMU binary")); - return -1; - } + baseName =3D "virtio-input-host"; + cap =3D QEMU_CAPS_VIRTIO_INPUT_HOST; + ccwCap =3D QEMU_CAPS_VIRTIO_INPUT_HOST; break; case VIR_DOMAIN_INPUT_TYPE_LAST: default: @@ -5777,6 +5767,15 @@ qemuDomainDeviceDefValidateInput(const virDomainInpu= tDef *input, return -1; } =20 + if (!virQEMUCapsGet(qemuCaps, cap) || + (input->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && + !virQEMUCapsGet(qemuCaps, ccwCap))) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("%s is not supported by this QEMU binary"), + baseName); + return -1; + } + return 0; } =20 --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri May 3 23:47:13 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 1536236580131433.1427489886946; Thu, 6 Sep 2018 05:23:00 -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 94C9F307D915; Thu, 6 Sep 2018 12:22:58 +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 5DAB851DF8; Thu, 6 Sep 2018 12:22:58 +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 14394181A13C; Thu, 6 Sep 2018 12:22:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w86CMUSo006849 for ; Thu, 6 Sep 2018 08:22:30 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1200810075E5; Thu, 6 Sep 2018 12:22:30 +0000 (UTC) Received: from inaba.usersys.redhat.com (unknown [10.43.2.44]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A127210FD2B7 for ; Thu, 6 Sep 2018 12:22:29 +0000 (UTC) From: Andrea Bolognani To: libvir-list@redhat.com Date: Thu, 6 Sep 2018 14:22:19 +0200 Message-Id: <20180906122219.15056-8-abologna@redhat.com> In-Reply-To: <20180906122219.15056-1-abologna@redhat.com> References: <20180906122219.15056-1-abologna@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 7/7] qemu: Unify generation of command line for virtio devices 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.48]); Thu, 06 Sep 2018 12:22:59 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" A virtio device such as will be translated to one of four different QEMU devices based on the address type. This behavior is the same for all virtio devices, but unfortunately we have separate ad-hoc code dealing with each and every one of them: not only this is pointless duplication, but it turns out that most of that code is not robust against new address types being introduced and some of it is outright buggy. Introduce a new function, qemuBuildVirtioDevStr(), which deals with the issue in a generic fashion, and rewrite all existing code to use it. This fixes a bunch of issues such as virtio-serial-pci being used with virtio-mmio addresses and virtio-gpu not being usable at all with virtio-mmio addresses. It also introduces a couple of minor regressions, namely no longer erroring out when attempting to use virtio-balloon and virtio-input devices with virtio-s390 addresses; that said, virtio-s390 has been superseded by virtio-ccw such a long time ago that recent QEMU releases have dropped support for the former entirely, so re-implementing such device-specific validation is not worth it. Signed-off-by: Andrea Bolognani Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_command.c | 181 ++++++++++++++++++---------------------- 1 file changed, 81 insertions(+), 100 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index db7c3ad698..041e4bd7fb 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -397,6 +397,59 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, return ret; } =20 + +static int +qemuBuildVirtioDevStr(virBufferPtr buf, + const char *baseName, + virDomainDeviceAddressType type) +{ + const char *implName =3D NULL; + int ret =3D -1; + + switch (type) { + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: + implName =3D "pci"; + break; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO: + implName =3D "device"; + break; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW: + implName =3D "ccw"; + break; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390: + implName =3D "s390"; + break; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCID: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DIMM: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected address type for '%s'"), baseName); + goto done; + + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE: + case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST: + default: + virReportEnumRangeError(virDomainDeviceAddressType, type); + goto done; + } + + virBufferAsprintf(buf, "%s-%s", baseName, implName); + + ret =3D 0; + + done: + return ret; +} + + static int qemuBuildVirtioOptionsStr(virBufferPtr buf, virDomainVirtioOptionsPtr virtio, @@ -2002,17 +2055,8 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, break; =20 case VIR_DOMAIN_DISK_BUS_VIRTIO: - if (disk->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { - virBufferAddLit(&opt, "virtio-blk-ccw"); - } else if (disk->info.type =3D=3D - VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390) { - virBufferAddLit(&opt, "virtio-blk-s390"); - } else if (disk->info.type =3D=3D - VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO) { - virBufferAddLit(&opt, "virtio-blk-device"); - } else { - virBufferAddLit(&opt, "virtio-blk-pci"); - } + if (qemuBuildVirtioDevStr(&opt, "virtio-blk", disk->info.type) < 0) + goto error; =20 if (disk->iothread) virBufferAsprintf(&opt, ",iothread=3Diothread%u", disk->iothre= ad); @@ -2546,10 +2590,8 @@ qemuBuildFSDevStr(const virDomainDef *def, goto error; } =20 - if (fs->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) - virBufferAddLit(&opt, "virtio-9p-ccw"); - else - virBufferAddLit(&opt, "virtio-9p-pci"); + if (qemuBuildVirtioDevStr(&opt, "virtio-9p", fs->info.type) < 0) + goto error; =20 virBufferAsprintf(&opt, ",id=3D%s", fs->info.alias); virBufferAsprintf(&opt, ",fsdev=3D%s%s", @@ -2744,7 +2786,6 @@ qemuBuildControllerDevStr(const virDomainDef *domainD= ef, int *nusbcontroller) { virBuffer buf =3D VIR_BUFFER_INITIALIZER; - int address_type =3D def->info.type; =20 *devstr =3D NULL; =20 @@ -2752,19 +2793,8 @@ qemuBuildControllerDevStr(const virDomainDef *domain= Def, case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: switch ((virDomainControllerModelSCSI) def->model) { case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: - switch (address_type) { - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW: - virBufferAddLit(&buf, "virtio-scsi-ccw"); - break; - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390: - virBufferAddLit(&buf, "virtio-scsi-s390"); - break; - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO: - virBufferAddLit(&buf, "virtio-scsi-device"); - break; - default: - virBufferAddLit(&buf, "virtio-scsi-pci"); - } + if (qemuBuildVirtioDevStr(&buf, "virtio-scsi", def->info.type)= < 0) + goto error; =20 if (def->iothread) { virBufferAsprintf(&buf, ",iothread=3Diothread%u", @@ -2804,22 +2834,9 @@ qemuBuildControllerDevStr(const virDomainDef *domain= Def, break; =20 case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: - switch (address_type) { - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: - virBufferAddLit(&buf, "virtio-serial-pci"); - break; - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW: - virBufferAddLit(&buf, "virtio-serial-ccw"); - break; - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390: - virBufferAddLit(&buf, "virtio-serial-s390"); - break; - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO: - virBufferAddLit(&buf, "virtio-serial-device"); - break; - default: - virBufferAddLit(&buf, "virtio-serial"); - } + if (qemuBuildVirtioDevStr(&buf, "virtio-serial", def->info.type) <= 0) + goto error; + virBufferAsprintf(&buf, ",id=3D%s", def->info.alias); if (def->opts.vioserial.ports !=3D -1) { virBufferAsprintf(&buf, ",max_ports=3D%d", @@ -3517,24 +3534,18 @@ qemuBuildNicDevStr(virDomainDefPtr def, virQEMUCapsPtr qemuCaps) { virBuffer buf =3D VIR_BUFFER_INITIALIZER; - const char *nic =3D net->model; bool usingVirtio =3D false; char macaddr[VIR_MAC_STRING_BUFLEN]; =20 if (STREQ(net->model, "virtio")) { - if (net->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) - nic =3D "virtio-net-ccw"; - else if (net->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRT= IO_S390) - nic =3D "virtio-net-s390"; - else if (net->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRT= IO_MMIO) - nic =3D "virtio-net-device"; - else - nic =3D "virtio-net-pci"; + if (qemuBuildVirtioDevStr(&buf, "virtio-net", net->info.type) < 0) + goto error; =20 usingVirtio =3D true; + } else { + virBufferAddStr(&buf, net->model); } =20 - virBufferAdd(&buf, nic, -1); if (usingVirtio && net->driver.virtio.txmode) { if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_TX_ALG)) { virBufferAddLit(&buf, ",tx=3D"); @@ -3929,21 +3940,9 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd, return -1; } =20 - switch (def->memballoon->info.type) { - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: - virBufferAddLit(&buf, "virtio-balloon-pci"); - break; - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW: - virBufferAddLit(&buf, "virtio-balloon-ccw"); - break; - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO: - virBufferAddLit(&buf, "virtio-balloon-device"); - break; - default: - virReportError(VIR_ERR_XML_ERROR, - _("memballoon unsupported with address type '%s= '"), - virDomainDeviceAddressTypeToString(def->memball= oon->info.type)); - goto error; + if (qemuBuildVirtioDevStr(&buf, "virtio-balloon", + def->memballoon->info.type) < 0) { + goto error; } =20 virBufferAsprintf(&buf, ",id=3D%s", def->memballoon->info.alias); @@ -4040,33 +4039,23 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, virQEMUCapsPtr qemuCaps) { virBuffer buf =3D VIR_BUFFER_INITIALIZER; - const char *suffix; - - if (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { - suffix =3D "-pci"; - } else if (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { - suffix =3D "-ccw"; - } else if (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO= _MMIO) { - suffix =3D "-device"; - } else { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unsupported address type %s for virtio input dev= ice"), - virDomainDeviceAddressTypeToString(dev->info.type)); - goto error; - } =20 switch ((virDomainInputType)dev->type) { case VIR_DOMAIN_INPUT_TYPE_MOUSE: - virBufferAsprintf(&buf, "virtio-mouse%s", suffix); + if (qemuBuildVirtioDevStr(&buf, "virtio-mouse", dev->info.type) < = 0) + goto error; break; case VIR_DOMAIN_INPUT_TYPE_TABLET: - virBufferAsprintf(&buf, "virtio-tablet%s", suffix); + if (qemuBuildVirtioDevStr(&buf, "virtio-tablet", dev->info.type) <= 0) + goto error; break; case VIR_DOMAIN_INPUT_TYPE_KBD: - virBufferAsprintf(&buf, "virtio-keyboard%s", suffix); + if (qemuBuildVirtioDevStr(&buf, "virtio-keyboard", dev->info.type)= < 0) + goto error; break; case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: - virBufferAsprintf(&buf, "virtio-input-host%s", suffix); + if (qemuBuildVirtioDevStr(&buf, "virtio-input-host", dev->info.typ= e) < 0) + goto error; break; case VIR_DOMAIN_INPUT_TYPE_LAST: default: @@ -4379,10 +4368,8 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, } =20 if (STREQ(model, "virtio-gpu")) { - if (video->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) - virBufferAsprintf(&buf, "%s-ccw", model); - else - virBufferAsprintf(&buf, "%s-pci", model); + if (qemuBuildVirtioDevStr(&buf, "virtio-gpu", video->info.type) < = 0) + goto error; } else { virBufferAsprintf(&buf, "%s", model); } @@ -5813,14 +5800,8 @@ qemuBuildRNGDevStr(const virDomainDef *def, dev->source.file)) goto error; =20 - if (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) - virBufferAddLit(&buf, "virtio-rng-ccw"); - else if (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S= 390) - virBufferAddLit(&buf, "virtio-rng-s390"); - else if (dev->info.type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_M= MIO) - virBufferAddLit(&buf, "virtio-rng-device"); - else - virBufferAddLit(&buf, "virtio-rng-pci"); + if (qemuBuildVirtioDevStr(&buf, "virtio-rng", dev->info.type) < 0) + goto error; =20 virBufferAsprintf(&buf, ",rng=3Dobj%s,id=3D%s", dev->info.alias, dev->info.alias); --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list