From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 173955065780894.11384145128454; Fri, 14 Feb 2025 08:30:57 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id BE1861BAE; Fri, 14 Feb 2025 11:30:56 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 32E6A1BA7; Fri, 14 Feb 2025 11:29:59 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 7591B1969; Fri, 14 Feb 2025 11:29:55 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id DD3D915CA for ; Fri, 14 Feb 2025 11:29:54 -0500 (EST) Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-127-jdHtylaGOc67LqPZ1L7fwA-1; Fri, 14 Feb 2025 11:29:53 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7F9271903051 for ; Fri, 14 Feb 2025 16:29:52 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 1D9221955DCE; Fri, 14 Feb 2025 16:29:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550594; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Xc8DqPsrh7QYUSibiK7rI84/zs9RKk8idXp648md8cw=; b=RbhR/xZ6G1CPj82Th8pzSg2D4PEDpwrLpenRCdDMTmeMhKqk0rF0UYQae/4Q/nXE0P0dug nN/SQeXSyqKUnQeBnVkkfCF/joPZYg5ckPA07AjaCBt8uwUMrfSiMDwq1rDkVjRK4H8D78 e3mE//7qcyMu2bWNJl8+QRzKKKzo4TE= X-MC-Unique: jdHtylaGOc67LqPZ1L7fwA-1 X-Mimecast-MFC-AGG-ID: jdHtylaGOc67LqPZ1L7fwA_1739550592 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 01/13] conf: Rename 'virDomainDiskIothreadDef' to 'virDomainIothreadMappingDef' Date: Fri, 14 Feb 2025 17:29:35 +0100 Message-ID: <8c843082bbd2462d9828f7a5bbdd1fc26fc772c6.1739550300.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: HGKUFdb60yGgwqUYY4MFViBGx2ToK7OVnuYIPOOEz-s_1739550592 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: JOMTCJ462BRQ2HG52LL5LYD6DVRFUW75 X-Message-ID-Hash: JOMTCJ462BRQ2HG52LL5LYD6DVRFUW75 X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550659980019100 Content-Type: text/plain; charset="utf-8" The iothread mapping will be also possible for 'virtio-scsi' controllers so rename the corresponding structs to a generic name. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/conf/domain_conf.c | 10 +++++----- src/conf/domain_conf.h | 10 +++++----- src/hypervisor/domain_driver.c | 2 +- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_domain.c | 4 ++-- src/qemu/qemu_validate.c | 4 ++-- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 87f87bbe56..22b9dad9ee 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2368,7 +2368,7 @@ virDomainDefGetVcpusTopology(const virDomainDef *def, void -virDomainDiskIothreadDefFree(virDomainDiskIothreadDef *def) +virDomainIothreadMappingDefFree(virDomainIothreadMappingDef *def) { if (!def) return; @@ -2426,7 +2426,7 @@ virDomainDiskDefFree(virDomainDiskDef *def) g_free(def->virtio); virDomainDeviceInfoClear(&def->info); virObjectUnref(def->privateData); - g_slist_free_full(def->iothreads, (GDestroyNotify) virDomainDiskIothre= adDefFree); + g_slist_free_full(def->iothreads, (GDestroyNotify) virDomainIothreadMa= ppingDefFree); g_free(def); } @@ -7991,7 +7991,7 @@ virDomainDiskDefDriverParseXML(virDomainDiskDef *def, return -1; if ((iothreadsNode =3D virXMLNodeGetSubelement(cur, "iothreads"))) { - g_autoslist(virDomainDiskIothreadDef) ioth =3D NULL; + g_autoslist(virDomainIothreadMappingDef) ioth =3D NULL; g_autoptr(GPtrArray) iothreadNodes =3D NULL; if ((iothreadNodes =3D virXMLNodeGetSubelementList(iothreadsNode, = "iothread"))) { @@ -7999,7 +7999,7 @@ virDomainDiskDefDriverParseXML(virDomainDiskDef *def, for (i =3D 0; i < iothreadNodes->len; i++) { xmlNodePtr iothNode =3D g_ptr_array_index(iothreadNodes, i= ); - g_autoptr(virDomainDiskIothreadDef) iothdef =3D g_new0(vir= DomainDiskIothreadDef, 1); + g_autoptr(virDomainIothreadMappingDef) iothdef =3D g_new0(= virDomainIothreadMappingDef, 1); g_autoptr(GPtrArray) queueNodes =3D NULL; if (virXMLPropUInt(iothNode, "id", 10, VIR_XML_PROP_REQUIR= ED, @@ -23240,7 +23240,7 @@ virDomainDiskDefFormatDriver(virBuffer *buf, GSList *n; for (n =3D disk->iothreads; n; n =3D n->next) { - virDomainDiskIothreadDef *iothDef =3D n->data; + virDomainIothreadMappingDef *iothDef =3D n->data; g_auto(virBuffer) iothreadAttrBuf =3D VIR_BUFFER_INITIALIZER; g_auto(virBuffer) iothreadChildBuf =3D VIR_BUFFER_INIT_CHILD(&= iothreadsChildBuf); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e51c74b6d1..10dd5497ac 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -507,7 +507,7 @@ typedef enum { VIR_ENUM_DECL(virDomainSnapshotLocation); -struct _virDomainDiskIothreadDef { +struct _virDomainIothreadMappingDef { unsigned int id; /* optional list of virtqueues the iothread should handle */ @@ -515,9 +515,9 @@ struct _virDomainDiskIothreadDef { size_t nqueues; }; -typedef struct _virDomainDiskIothreadDef virDomainDiskIothreadDef; -void virDomainDiskIothreadDefFree(virDomainDiskIothreadDef *def); -G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainDiskIothreadDef, virDomainDiskIothr= eadDefFree); +typedef struct _virDomainIothreadMappingDef virDomainIothreadMappingDef; +void virDomainIothreadMappingDefFree(virDomainIothreadMappingDef *def); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainIothreadMappingDef, virDomainIothre= adMappingDefFree); /* Stores the virtual disk configuration */ @@ -574,7 +574,7 @@ struct _virDomainDiskDef { virDomainDeviceSGIO sgio; virDomainDiskDiscard discard; unsigned int iothread; /* unused =3D 0, > 0 specific thread # */ - GSList *iothreads; /* List of virDomainDiskIothreadsDef */ + GSList *iothreads; /* List of virDomainIothreadMappingDef */ virDomainDiskDetectZeroes detect_zeroes; virTristateSwitch discard_no_unref; char *domain_name; /* backend domain name */ diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c index bea84cd09d..9fbfec9f04 100644 --- a/src/hypervisor/domain_driver.c +++ b/src/hypervisor/domain_driver.c @@ -562,7 +562,7 @@ virDomainDriverDelIOThreadCheck(virDomainDef *def, bool inuse =3D false; for (n =3D def->disks[i]->iothreads; n; n =3D n->next) { - virDomainDiskIothreadDef *iothread =3D n->data; + virDomainIothreadMappingDef *iothread =3D n->data; if (iothread->id =3D=3D iothread_id) { inuse =3D true; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 7370711918..35a71b73a7 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1580,7 +1580,7 @@ qemuBuildDiskDeviceIothreadMappingProps(GSList *iothr= eads) GSList *n; for (n =3D iothreads; n; n =3D n->next) { - virDomainDiskIothreadDef *ioth =3D n->data; + virDomainIothreadMappingDef *ioth =3D n->data; g_autoptr(virJSONValue) props =3D NULL; g_autoptr(virJSONValue) queues =3D NULL; g_autofree char *alias =3D g_strdup_printf("iothread%u", ioth->id); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index cf05dca55a..7ede1a5a6e 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -6646,8 +6646,8 @@ qemuDomainDiskChangeSupportedIothreads(virDomainDiskD= ef *disk, GSList *new =3D disk->iothreads; while (true) { - virDomainDiskIothreadDef *old_def; - virDomainDiskIothreadDef *new_def; + virDomainIothreadMappingDef *old_def; + virDomainIothreadMappingDef *new_def; size_t i; /* match - both empty or both at the end */ diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 76f2eafe49..fb4c9bf552 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -2801,7 +2801,7 @@ qemuValidateDomainDeviceDefDiskIOThreads(const virDom= ainDef *def, } if (disk->iothreads) { - virDomainDiskIothreadDef *first_ioth =3D disk->iothreads->data; + virDomainIothreadMappingDef *first_ioth =3D disk->iothreads->data; g_autoptr(virBitmap) queueMap =3D NULL; g_autoptr(GHashTable) iothreads =3D virHashNew(NULL); ssize_t unused; @@ -2827,7 +2827,7 @@ qemuValidateDomainDeviceDefDiskIOThreads(const virDom= ainDef *def, * - queue must be assigned only once */ for (n =3D disk->iothreads; n; n =3D n->next) { - virDomainDiskIothreadDef *ioth =3D n->data; + virDomainIothreadMappingDef *ioth =3D n->data; g_autofree char *alias =3D g_strdup_printf("iothread%u", ioth-= >id); size_t i; --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739550715906583.6478403419189; Fri, 14 Feb 2025 08:31:55 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 483259BD; Fri, 14 Feb 2025 11:31:55 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 7EC8B1BA4; Fri, 14 Feb 2025 11:30:22 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6FE351B24; Fri, 14 Feb 2025 11:30:16 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 73CD919DF for ; Fri, 14 Feb 2025 11:30:00 -0500 (EST) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-231-ElfOwG97N6CxQqCwvi01Zw-1; Fri, 14 Feb 2025 11:29:58 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id AC9381801BFE for ; Fri, 14 Feb 2025 16:29:54 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 06A341955DCE; Fri, 14 Feb 2025 16:29:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550600; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dYBDav/sPsa0JseE/mAOM8J2hu2Z1mQX+zm8V0kiICI=; b=NKi0KfCT0kHUD222wSxwrBKl4d0ZfKX1JBKwzDkBM3Vy04H6BY0dzA4vrCBtcbvNNlWriW rgM1d5wD8Ew66MHBKf81np7r2GFBoaOMINFWAUpaAWoG3S1eE5rWZptWDW9aqPKU1lBMoX sOIgXJFoF+EQWth45O+hl7BRTDgvZJc= X-MC-Unique: ElfOwG97N6CxQqCwvi01Zw-1 X-Mimecast-MFC-AGG-ID: ElfOwG97N6CxQqCwvi01Zw_1739550595 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 02/13] conf: domain: Extract code for parsing and formatting iotrhead mapping definition Date: Fri, 14 Feb 2025 17:29:36 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: onFTT15UwcKE3wm_013IutTo-g4-61LsHTIOofEsmUo_1739550595 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: YWKVL5LM7E65DAXDI2ELYRCNQWD6UZGI X-Message-ID-Hash: YWKVL5LM7E65DAXDI2ELYRCNQWD6UZGI X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550733539019000 Content-Type: text/plain; charset="utf-8" The code will be also needed for 'virtio-scsi' controller definitions. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/conf/domain_conf.c | 143 +++++++++++++++++++++++------------------ 1 file changed, 81 insertions(+), 62 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 22b9dad9ee..1a52cda62d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7939,11 +7939,56 @@ virDomainDiskDefGeometryParse(virDomainDiskDef *def, static int -virDomainDiskDefDriverParseXML(virDomainDiskDef *def, - xmlNodePtr cur) +virDomainIothreadMappingDefParse(xmlNodePtr driverNode, + GSList **iothreads) { xmlNodePtr iothreadsNode; + g_autoslist(virDomainIothreadMappingDef) ioth =3D NULL; + g_autoptr(GPtrArray) iothreadNodes =3D NULL; + size_t i; + + if (!(iothreadsNode =3D virXMLNodeGetSubelement(driverNode, "iothreads= "))) + return 0; + + if (!(iothreadNodes =3D virXMLNodeGetSubelementList(iothreadsNode, "io= thread"))) + return 0; + + for (i =3D 0; i < iothreadNodes->len; i++) { + xmlNodePtr iothNode =3D g_ptr_array_index(iothreadNodes, i); + g_autoptr(virDomainIothreadMappingDef) iothdef =3D g_new0(virDomai= nIothreadMappingDef, 1); + g_autoptr(GPtrArray) queueNodes =3D NULL; + + if (virXMLPropUInt(iothNode, "id", 10, VIR_XML_PROP_REQUIRED, + &iothdef->id) < 0) + return -1; + + if ((queueNodes =3D virXMLNodeGetSubelementList(iothNode, "queue")= )) { + size_t q; + + iothdef->queues =3D g_new0(unsigned int, queueNodes->len); + iothdef->nqueues =3D queueNodes->len; + + for (q =3D 0; q < queueNodes->len; q++) { + xmlNodePtr queueNode =3D g_ptr_array_index(queueNodes, q); + + if (virXMLPropUInt(queueNode, "id", 10, VIR_XML_PROP_REQUI= RED, + &(iothdef->queues[q])) < 0) + return -1; + } + } + ioth =3D g_slist_prepend(ioth, g_steal_pointer(&iothdef)); + } + + *iothreads =3D g_slist_reverse(g_steal_pointer(&ioth)); + return 0; +} + + +static int +virDomainDiskDefDriverParseXML(virDomainDiskDef *def, + xmlNodePtr cur) +{ def->driverName =3D virXMLPropString(cur, "name"); if (virXMLPropEnum(cur, "cache", virDomainDiskCacheTypeFromString, @@ -7990,43 +8035,8 @@ virDomainDiskDefDriverParseXML(virDomainDiskDef *def, if (virXMLPropUInt(cur, "iothread", 10, VIR_XML_PROP_NONZERO, &def->io= thread) < 0) return -1; - if ((iothreadsNode =3D virXMLNodeGetSubelement(cur, "iothreads"))) { - g_autoslist(virDomainIothreadMappingDef) ioth =3D NULL; - g_autoptr(GPtrArray) iothreadNodes =3D NULL; - - if ((iothreadNodes =3D virXMLNodeGetSubelementList(iothreadsNode, = "iothread"))) { - size_t i; - - for (i =3D 0; i < iothreadNodes->len; i++) { - xmlNodePtr iothNode =3D g_ptr_array_index(iothreadNodes, i= ); - g_autoptr(virDomainIothreadMappingDef) iothdef =3D g_new0(= virDomainIothreadMappingDef, 1); - g_autoptr(GPtrArray) queueNodes =3D NULL; - - if (virXMLPropUInt(iothNode, "id", 10, VIR_XML_PROP_REQUIR= ED, - &iothdef->id) < 0) - return -1; - - if ((queueNodes =3D virXMLNodeGetSubelementList(iothNode, = "queue"))) { - size_t q; - - iothdef->queues =3D g_new0(unsigned int, queueNodes->l= en); - iothdef->nqueues =3D queueNodes->len; - - for (q =3D 0; q < queueNodes->len; q++) { - xmlNodePtr queueNode =3D g_ptr_array_index(queueNo= des, q); - - if (virXMLPropUInt(queueNode, "id", 10, VIR_XML_PR= OP_REQUIRED, - &(iothdef->queues[q])) < 0) - return -1; - } - } - - ioth =3D g_slist_prepend(ioth, g_steal_pointer(&iothdef)); - } - - def->iothreads =3D g_slist_reverse(g_steal_pointer(&ioth)); - } - } + if (virDomainIothreadMappingDefParse(cur, &def->iothreads) < 0) + return -1; if (virXMLPropEnum(cur, "detect_zeroes", virDomainDiskDetectZeroesTypeFromString, @@ -23161,6 +23171,37 @@ virDomainDiskDefFormatIotune(virBuffer *buf, #undef FORMAT_IOTUNE +static void +virDomainIothreadMappingDefFormat(virBuffer *buf, + GSList *iothreads) +{ + g_auto(virBuffer) iothreadsChildBuf =3D VIR_BUFFER_INIT_CHILD(buf); + GSList *n; + + if (!iothreads) + return; + + for (n =3D iothreads; n; n =3D n->next) { + virDomainIothreadMappingDef *iothDef =3D n->data; + g_auto(virBuffer) iothreadAttrBuf =3D VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) iothreadChildBuf =3D VIR_BUFFER_INIT_CHILD(&ioth= readsChildBuf); + + virBufferAsprintf(&iothreadAttrBuf, " id=3D'%u'", iothDef->id); + + if (iothDef->queues) { + size_t q; + + for (q =3D 0; q < iothDef->nqueues; q++) + virBufferAsprintf(&iothreadChildBuf, "\n= ", iothDef->queues[q]); + } + + virXMLFormatElement(&iothreadsChildBuf, "iothread", &iothreadAttrB= uf, &iothreadChildBuf); + } + + virXMLFormatElement(buf, "iothreads", NULL, &iothreadsChildBuf); +} + + static void virDomainDiskDefFormatDriver(virBuffer *buf, virDomainDiskDef *disk) @@ -23235,29 +23276,7 @@ virDomainDiskDefFormatDriver(virBuffer *buf, virXMLFormatElement(&childBuf, "metadata_cache", NULL, &metadataCa= cheChildBuf); } - if (disk->iothreads) { - g_auto(virBuffer) iothreadsChildBuf =3D VIR_BUFFER_INIT_CHILD(&chi= ldBuf); - GSList *n; - - for (n =3D disk->iothreads; n; n =3D n->next) { - virDomainIothreadMappingDef *iothDef =3D n->data; - g_auto(virBuffer) iothreadAttrBuf =3D VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) iothreadChildBuf =3D VIR_BUFFER_INIT_CHILD(&= iothreadsChildBuf); - - virBufferAsprintf(&iothreadAttrBuf, " id=3D'%u'", iothDef->id); - - if (iothDef->queues) { - size_t q; - - for (q =3D 0; q < iothDef->nqueues; q++) - virBufferAsprintf(&iothreadChildBuf, "\n", iothDef->queues[q]); - } - - virXMLFormatElement(&iothreadsChildBuf, "iothread", &iothreadA= ttrBuf, &iothreadChildBuf); - } - - virXMLFormatElement(&childBuf, "iothreads", NULL, &iothreadsChildB= uf); - } + virDomainIothreadMappingDefFormat(&childBuf, disk->iothreads); virXMLFormatElement(buf, "driver", &attrBuf, &childBuf); } --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739550753226545.3206944463896; Fri, 14 Feb 2025 08:32:33 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id F3B981186; Fri, 14 Feb 2025 11:31:28 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 6DC2F1BFC; Fri, 14 Feb 2025 11:30:19 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 3F46E1BB2; Fri, 14 Feb 2025 11:30:15 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 60AB71BB2 for ; Fri, 14 Feb 2025 11:29:59 -0500 (EST) Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-569-6It8SOe5NueJWIvUbqswjg-1; Fri, 14 Feb 2025 11:29:57 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8EC1A193578F for ; Fri, 14 Feb 2025 16:29:56 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 321291955DCE; Fri, 14 Feb 2025 16:29:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550598; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6fJ6bBLWl9j0FfPlLjoX/Y315LgiTY1EMliqWVlpMAk=; b=ThrxOtVl4GRQe8ktvhi5QfR/Jb7QBpcLF5Dp4H9N2K0L+SDp5cc8FozOIubNQx5NEeEsT+ BmoGM7DQgyO/vCjrte9tFeoJ39fl6gcyyiTW7Zyau25147q5+x5ASJoxBd9EQClO0hAXP8 gE9ft5lV89WcPcyz6dWplN8xisqkVqo= X-MC-Unique: 6It8SOe5NueJWIvUbqswjg-1 X-Mimecast-MFC-AGG-ID: 6It8SOe5NueJWIvUbqswjg_1739550596 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 03/13] hypervisor: domain: Extract code for checking iothread usage Date: Fri, 14 Feb 2025 17:29:37 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: YEkEKBJoac55L6C3KtVDtAYa3neYcsNXWGXOs9W4QQU_1739550596 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: UECWRDKOQJXZCYDXQNUMDV762ETBYNBJ X-Message-ID-Hash: UECWRDKOQJXZCYDXQNUMDV762ETBYNBJ X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550754165019100 Content-Type: text/plain; charset="utf-8" The code will be also needed for 'virtio-scsi' controller definitions. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/hypervisor/domain_driver.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c index 9fbfec9f04..b7499a376f 100644 --- a/src/hypervisor/domain_driver.c +++ b/src/hypervisor/domain_driver.c @@ -537,6 +537,23 @@ virDomainDriverAddIOThreadCheck(virDomainDef *def, return 0; } + +static bool +virDomainIothreadMappingDefHasIothread(GSList *iothreads, + unsigned int iothread_id) +{ + GSList *n; + + for (n =3D iothreads; n; n =3D n->next) { + virDomainIothreadMappingDef *iothread =3D n->data; + + if (iothread->id =3D=3D iothread_id) + return true; + } + + return false; +} + /** * virDomainDriverDelIOThreadCheck: * @def: domain definition @@ -558,19 +575,7 @@ virDomainDriverDelIOThreadCheck(virDomainDef *def, } for (i =3D 0; i < def->ndisks; i++) { - GSList *n; - bool inuse =3D false; - - for (n =3D def->disks[i]->iothreads; n; n =3D n->next) { - virDomainIothreadMappingDef *iothread =3D n->data; - - if (iothread->id =3D=3D iothread_id) { - inuse =3D true; - break; - } - } - - if (inuse || + if (virDomainIothreadMappingDefHasIothread(def->disks[i]->iothread= s, iothread_id) || def->disks[i]->iothread =3D=3D iothread_id) { virReportError(VIR_ERR_INVALID_ARG, _("cannot remove IOThread %1$u since it is bein= g used by disk '%2$s'"), --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 173955073506180.32025830709654; Fri, 14 Feb 2025 08:32:15 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id EEDCF1B8E; Fri, 14 Feb 2025 11:32:13 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 618171C13; Fri, 14 Feb 2025 11:30:24 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id DA6E41B3D; Fri, 14 Feb 2025 11:30:16 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 13E091A3D for ; Fri, 14 Feb 2025 11:30:01 -0500 (EST) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-619-KAUgFUsQNHGolFiq4JreQg-1; Fri, 14 Feb 2025 11:29:59 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 33D07180120F for ; Fri, 14 Feb 2025 16:29:58 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 162791955DCE; Fri, 14 Feb 2025 16:29:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550600; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=K0cbg1hMcI6yWwSMNXUCijQIYZhfMFN3VuaN4TMiiOo=; b=gxbJ4HdG0tp8jd0wE34glOtsyC+OK+cYfuNLJ/25orPZnb4I9X3yKvnYr/h/ef43XUEH6G LBIO63flVVMAYKu7TqZFeI+UKzlgxgSPGCyxYZVJ6cjXxnPje/7ao1ZjiZdjIUKboCwy6Z QhJWQNbTgH3ti2+mEXZ5IfYVtxY0uJ8= X-MC-Unique: KAUgFUsQNHGolFiq4JreQg-1 X-Mimecast-MFC-AGG-ID: KAUgFUsQNHGolFiq4JreQg_1739550598 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 04/13] qemu: command: Rename 'qemuBuildDiskDeviceIothreadMappingProps' to 'qemuBuildIothreadMappingProps' Date: Fri, 14 Feb 2025 17:29:38 +0100 Message-ID: <5e74cce3c5162c9222e4d32540f7f6e530e8c5f4.1739550300.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: dHFY7fQCZGzvuW4AQOWMYpoyMIQYBIXeeailiOPrlLo_1739550598 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 6V7RVTNIC5UOQ7I7KECVBRU6D7QY6J7M X-Message-ID-Hash: 6V7RVTNIC5UOQ7I7KECVBRU6D7QY6J7M X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550738126019100 Content-Type: text/plain; charset="utf-8" Prepare for reuse of the code for 'virtio-scsi' controller. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_command.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 35a71b73a7..b76fec27c5 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1574,7 +1574,7 @@ qemuBuildDriveStr(virDomainDiskDef *disk) static virJSONValue * -qemuBuildDiskDeviceIothreadMappingProps(GSList *iothreads) +qemuBuildIothreadMappingProps(GSList *iothreads) { g_autoptr(virJSONValue) ret =3D virJSONValueNewArray(); GSList *n; @@ -1687,7 +1687,7 @@ qemuBuildDiskDeviceProps(const virDomainDef *def, iothread =3D g_strdup_printf("iothread%u", disk->iothread); if (disk->iothreads && - !(iothreadMapping =3D qemuBuildDiskDeviceIothreadMappingProps(= disk->iothreads))) + !(iothreadMapping =3D qemuBuildIothreadMappingProps(disk->ioth= reads))) return NULL; if (virStorageSourceGetActualType(disk->src) !=3D VIR_STORAGE_TYPE= _VHOST_USER && --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739550761819960.591630515677; Fri, 14 Feb 2025 08:32:41 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id CC4A01B3B; Fri, 14 Feb 2025 11:32:40 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 64ED51B81; Fri, 14 Feb 2025 11:30:27 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 99F2B1994; Fri, 14 Feb 2025 11:30:20 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 2B8451BDB for ; Fri, 14 Feb 2025 11:30:03 -0500 (EST) Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-631-v2X349hTMBuEnVZskgyC6w-1; Fri, 14 Feb 2025 11:30:00 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 0BBC518EAB3A for ; Fri, 14 Feb 2025 16:30:00 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id BE0F21955DCE; Fri, 14 Feb 2025 16:29:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550602; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1TJUPAs/me0s1GbeRUM35rstjIrhjcdi3CwtDXM3v1k=; b=cILTqecuTVGYC31q7DHUiYP7eVxpOPlv/LRNNhqTIs3M2iX4OhKp5PWFzgm65nZ7aUzI+C JaNXmAmqNFv2s0nm8CoNk/ssxT5BVdOcdYUdP7W6e+RZurLYdwMD6uoKhdCZnGCMHuA/qq sUG9r7ra0HaTnr+y7f4xYu8tw01ev5g= X-MC-Unique: v2X349hTMBuEnVZskgyC6w-1 X-Mimecast-MFC-AGG-ID: v2X349hTMBuEnVZskgyC6w_1739550600 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 05/13] qemu: validate: Extract iothread mapping validation code Date: Fri, 14 Feb 2025 17:29:39 +0100 Message-ID: <8574af99453d2c03cc307112ff9bf84869771977.1739550300.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: w1zHdM2iIAe5Gs8zPRqZi_WYPJGeyMDRNdP_uszLMu8_1739550600 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: YVLSWDRF2HXYQ3CLQHJO7W6U4ZA2OMZ6 X-Message-ID-Hash: YVLSWDRF2HXYQ3CLQHJO7W6U4ZA2OMZ6 X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550764379019100 Content-Type: text/plain; charset="utf-8" Extract the code to 'qemuDomainValidateIothreadMapping'. It will be reused to validate the mapping for 'virtio-scsi' iothreads. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_validate.c | 192 +++++++++++++++++++++------------------ 1 file changed, 104 insertions(+), 88 deletions(-) diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index fb4c9bf552..8ac3e65e9d 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -2764,6 +2764,102 @@ qemuValidateDomainDeviceDefDiskSerial(const char *v= alue) } +static int +qemuDomainValidateIothreadMapping(const virDomainDef *def, + GSList *iothreads, + size_t queues) +{ + virDomainIothreadMappingDef *first_ioth; + g_autoptr(virBitmap) queueMap =3D NULL; + g_autoptr(GHashTable) iothreadMap =3D virHashNew(NULL); + ssize_t unused; + GSList *n; + + if (!iothreads) + return 0; + + first_ioth =3D iothreads->data; + + if (first_ioth->queues) { + if (queues =3D=3D 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("'queue' count must be configured for explici= t iothread to queue mapping")); + return -1; + } + + queueMap =3D virBitmapNew(queues); + } + + /* we are validating that: + * - there are no duplicate iothreads + * - there are only valid iothreads + * - if queue mapping is provided + * - queue is in range + * - it must be provided for all assigned iothreads + * - it must be provided for all queues + * - queue must be assigned only once + */ + for (n =3D iothreads; n; n =3D n->next) { + virDomainIothreadMappingDef *ioth =3D n->data; + g_autofree char *alias =3D g_strdup_printf("iothread%u", ioth->id); + size_t i; + + if (g_hash_table_contains(iothreadMap, alias)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("duplicate mapping for iothread '%1$u'"), iot= h->id); + return -1; + } + + g_hash_table_insert(iothreadMap, g_steal_pointer(&alias), NULL); + + if (!virDomainIOThreadIDFind(def, ioth->id)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("iothread '%1$u' not defined in iothreadid"), + ioth->id); + return -1; + } + + if (!!queueMap !=3D !!ioth->queues) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("iothread to queue mapping must be provided f= or all iothreads or for none")); + return -1; + } + + for (i =3D 0; i < ioth->nqueues; i++) { + bool hasMapping; + + if (virBitmapGetBit(queueMap, ioth->queues[i], &hasMapping) < = 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("iothread queue '%1$u' mapping out of ran= ge"), + ioth->queues[i]); + return -1; + } + + if (hasMapping) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("iothread queue '%1$u' is already assigne= d"), + ioth->queues[i]); + return -1; + } + + ignore_value(virBitmapSetBit(queueMap, ioth->queues[i])); + + } + } + + if (queueMap) { + if ((unused =3D virBitmapNextClearBit(queueMap, -1)) >=3D 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("missing iothread mapping for queue '%1$zd'"), + unused); + return -1; + } + } + + return 0; +} + + static int qemuValidateDomainDeviceDefDiskIOThreads(const virDomainDef *def, const virDomainDiskDef *disk, @@ -2800,95 +2896,15 @@ qemuValidateDomainDeviceDefDiskIOThreads(const virD= omainDef *def, return -1; } - if (disk->iothreads) { - virDomainIothreadMappingDef *first_ioth =3D disk->iothreads->data; - g_autoptr(virBitmap) queueMap =3D NULL; - g_autoptr(GHashTable) iothreads =3D virHashNew(NULL); - ssize_t unused; - GSList *n; - - if (first_ioth->queues) { - if (disk->queues =3D=3D 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("disk 'queue' count must be configured fo= r explicit iothread to queue mapping")); - return -1; - } - - queueMap =3D virBitmapNew(disk->queues); - } - - /* we are validating that: - * - there are no duplicate iothreads - * - there are only valid iothreads - * - if queue mapping is provided - * - queue is in range - * - it must be provided for all assigned iothreads - * - it must be provided for all queues - * - queue must be assigned only once - */ - for (n =3D disk->iothreads; n; n =3D n->next) { - virDomainIothreadMappingDef *ioth =3D n->data; - g_autofree char *alias =3D g_strdup_printf("iothread%u", ioth-= >id); - size_t i; - - if (g_hash_table_contains(iothreads, alias)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("Duplicate mapping for iothread '%1$u'"),= ioth->id); - return -1; - } - - g_hash_table_insert(iothreads, g_steal_pointer(&alias), NULL); - - if (!virDomainIOThreadIDFind(def, ioth->id)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("Disk iothread '%1$u' not defined in ioth= readid"), - ioth->id); - return -1; - } - - if (!!queueMap !=3D !!ioth->queues) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("iothread to queue mapping must be provid= ed for all iothreads or for none")); - return -1; - } - - for (i =3D 0; i < ioth->nqueues; i++) { - bool hasMapping; - - if (virBitmapGetBit(queueMap, ioth->queues[i], &hasMapping= ) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("disk iothread queue '%1$u' mapping o= ut of range"), - ioth->queues[i]); - return -1; - } - - if (hasMapping) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("disk iothread queue '%1$u' is alread= y assigned"), - ioth->queues[i]); - return -1; - } - - ignore_value(virBitmapSetBit(queueMap, ioth->queues[i])); - - } - } + if (qemuDomainValidateIothreadMapping(def, disk->iothreads, disk->queu= es) < 0) + return -1; - if (queueMap) { - if ((unused =3D virBitmapNextClearBit(queueMap, -1)) >=3D 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("missing iothread mapping for queue '%1$z= d'"), - unused); - return -1; - } - } - } else { - if (!virDomainIOThreadIDFind(def, disk->iothread)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("Disk iothread '%1$u' not defined in iothread= id"), - disk->iothread); - return -1; - } + if (disk->iothread !=3D 0 && + !virDomainIOThreadIDFind(def, disk->iothread)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Disk iothread '%1$u' not defined in iothreadid"), + disk->iothread); + return -1; } return 0; --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739550789468155.77520158035406; Fri, 14 Feb 2025 08:33:09 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6BB0BB50; Fri, 14 Feb 2025 11:33:08 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 976971B7A; Fri, 14 Feb 2025 11:30:34 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id CD7561BCB; Fri, 14 Feb 2025 11:30:29 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 9B4A31AC5 for ; Fri, 14 Feb 2025 11:30:04 -0500 (EST) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-201-ShtG-BzoOSu5ik-DoEuv3A-1; Fri, 14 Feb 2025 11:30:03 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A472018011DC for ; Fri, 14 Feb 2025 16:30:01 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 89D1D1955DCE; Fri, 14 Feb 2025 16:30:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550604; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pI/TL50Z63eMQ7horaAZBVF8MfzPrEZ5Vy/TxUzgs9c=; b=Pux4TI8OeT23TVQ49K+qAnAM+LRPubwCYEBC7ptWGCj9zsfCuRJmFVijpM2ZSUXimwZoxE b2WHNbSeDypW5Yd6hqkwhHu9raszeAPX86Gqbviu/X4m2bExwYlpMhIBq0VWYwBJvrzrUb r/XXRplyxT08asDtXQdZEjLoR/z/BmY= X-MC-Unique: ShtG-BzoOSu5ik-DoEuv3A-1 X-Mimecast-MFC-AGG-ID: ShtG-BzoOSu5ik-DoEuv3A_1739550602 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 06/13] qemuValidateCheckSCSIControllerIOThreads: Return '0' and '-1' instead of bools Date: Fri, 14 Feb 2025 17:29:40 +0100 Message-ID: <3cea9895a8a9000ab9bd9ff584878dd91731f5df.1739550300.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 6wkkOnlsIqaquo8IfRn-Hs9moo5wtkjuZdltGo2b1I4_1739550602 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 7EZTV3WWTNNGKQ4I6BRC66WN4KUCNTEW X-Message-ID-Hash: 7EZTV3WWTNNGKQ4I6BRC66WN4KUCNTEW X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550790418019100 Content-Type: text/plain; charset="utf-8" The function reports libvirt errors so stick with the usual '0' and '-1' return values. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_validate.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 8ac3e65e9d..2185e31a27 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -3599,19 +3599,19 @@ qemuValidateDomainDeviceDefControllerIDE(const virD= omainControllerDef *controlle * Returns true if either supported or there are no iothreads for controll= er; * otherwise, returns false if configuration is not quite right. */ -static bool +static int qemuValidateCheckSCSIControllerIOThreads(const virDomainControllerDef *con= troller, const virDomainDef *def) { if (!controller->iothread) - return true; + return 0; if (controller->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && controller->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI && controller->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("virtio-scsi IOThreads only available for virtio = pci and virtio ccw controllers")); - return false; + return -1; } /* Can we find the controller iothread in the iothreadid list? */ @@ -3619,10 +3619,10 @@ qemuValidateCheckSCSIControllerIOThreads(const virD= omainControllerDef *controlle virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("controller iothread '%1$u' not defined in iothre= adid"), controller->iothread); - return false; + return -1; } - return true; + return 0; } @@ -3634,7 +3634,7 @@ qemuValidateDomainDeviceDefControllerSCSI(const virDo= mainControllerDef *controll case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL: - if (!qemuValidateCheckSCSIControllerIOThreads(controller, def)) + if (qemuValidateCheckSCSIControllerIOThreads(controller, def) = < 0) return -1; break; --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739550806856124.47585886877698; Fri, 14 Feb 2025 08:33:26 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 4AF6D1B7A; Fri, 14 Feb 2025 11:33:26 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 2B1D31C32; Fri, 14 Feb 2025 11:30:38 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id EB2881BBB; Fri, 14 Feb 2025 11:30:30 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 4137B1A7F for ; Fri, 14 Feb 2025 11:30:06 -0500 (EST) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-74-BhkQesrAOxORMoYLxfHhkQ-1; Fri, 14 Feb 2025 11:30:04 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 474581800989 for ; Fri, 14 Feb 2025 16:30:03 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2AB051955DCE; Fri, 14 Feb 2025 16:30:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550605; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rnAEF5l9RuufTds/7jHt5cvmIg9POHdB90VTeDaY5u4=; b=XO4H1E0hMOqbIPQU2zvfxUEh1lVSFlPemv6BQj6zW63N7m2/vEoBvvvviVbcOt3bT5en9T YLqciCaB2tpjMRWbSYiUOv3BFCP44g0t6yUz88oWEA2ce7udoroyBlYACDZOkZOi8SVJvT 9A/fERZSZZb7SUI47bgBK3aUEce5n88= X-MC-Unique: BhkQesrAOxORMoYLxfHhkQ-1 X-Mimecast-MFC-AGG-ID: BhkQesrAOxORMoYLxfHhkQ_1739550603 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 07/13] conf: schemas: Rename 'diskDriverIothreads' to 'iothreadMapping' Date: Fri, 14 Feb 2025 17:29:41 +0100 Message-ID: <0f177c57d1b73a8d02e2538444acd4a8e6c4142b.1739550300.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 3Bsqfu_fHlZy7xrNRXdGvyTqxAApplRd00c2svVkjps_1739550603 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: MPJTWQ6REKGXHBZ5OLK7FI5GKD5VGDIL X-Message-ID-Hash: MPJTWQ6REKGXHBZ5OLK7FI5GKD5VGDIL X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550815824019000 Content-Type: text/plain; charset="utf-8" The schema definition will be reused when adding iotrhead<->virtuqueue mapping for 'virtio-scsi'. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/conf/schemas/domaincommon.rng | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 96cedb85e8..755a43e893 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -2606,7 +2606,7 @@ - + @@ -2687,7 +2687,7 @@ - + --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739550829997447.6305862895267; Fri, 14 Feb 2025 08:33:49 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id E26791BC8; Fri, 14 Feb 2025 11:33:48 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 833211B59; Fri, 14 Feb 2025 11:30:40 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 375271B53; Fri, 14 Feb 2025 11:30:31 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id CE9581B53 for ; Fri, 14 Feb 2025 11:30:08 -0500 (EST) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-439-haeUXzo4MDSYKxxDjojfvg-1; Fri, 14 Feb 2025 11:30:07 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E85351801BCA for ; Fri, 14 Feb 2025 16:30:04 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D2B39194129B; Fri, 14 Feb 2025 16:30:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550608; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=57pJ5UBP9mpyiuQ+ZeDin8wGnvoqDWdrsFPhN6tjisw=; b=Cn3Ip1epuNascx4yaedJQuLE8z5zokpl480+kjSs5CFXxjhHHkLJCHkZ95yB23OCpoeQtr dZNHhv1p1i1sgZeJBHUE7U+XJ+rW7D8lzvUsBn6o5fMkmw4UGPtkLAewVt1ApmoYEzaZ9H 6iMLkn3nWLKOvzrQlsXCNV6YlovxnVw= X-MC-Unique: haeUXzo4MDSYKxxDjojfvg-1 X-Mimecast-MFC-AGG-ID: haeUXzo4MDSYKxxDjojfvg_1739550606 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 08/13] conf: Validate that iohtreads are used only with 'virtio-scsi' controllers Date: Fri, 14 Feb 2025 17:29:42 +0100 Message-ID: <93b6e8e49988c103c10d208faf56c9c8aac5792f.1739550300.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: nP5kie_C3Nkfdah8YNelca-L97odMpEkd9XRBCRyytg_1739550606 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: QULSMIZR6MJWSHUHKV24REPP4TONITMP X-Message-ID-Hash: QULSMIZR6MJWSHUHKV24REPP4TONITMP X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550832562019100 Content-Type: text/plain; charset="utf-8" The documentation states: ``iothread`` Supported for controller type ``scsi`` using model ``virtio-scsi`` for ``address`` types ``pci`` and ``ccw`` :since:`since 1.3.5 (QEMU 2.4)`. = The The code itself didn't validate if iothread is specified for any other controller type. Add test case showing the issue on one example. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/conf/domain_validate.c | 11 ++++++++ ...r-virtio-serial-iothread.x86_64-latest.err | 1 + .../controller-virtio-serial-iothread.xml | 27 +++++++++++++++++++ tests/qemuxmlconftest.c | 2 ++ 4 files changed, 41 insertions(+) create mode 100644 tests/qemuxmlconfdata/controller-virtio-serial-iothread= .x86_64-latest.err create mode 100644 tests/qemuxmlconfdata/controller-virtio-serial-iothread= .xml diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index eb5e764c02..88e5f37651 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -1260,6 +1260,17 @@ virDomainControllerDefValidate(const virDomainContro= llerDef *controller) } } + if (controller->iothread !=3D 0) { + if (controller->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI || + !(controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VI= RTIO_SCSI || + controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VI= RTIO_TRANSITIONAL || + controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VI= RTIO_NON_TRANSITIONAL)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("iothreads are supported only by 'virtio-scsi= ' controllers")); + return -1; + } + } + return 0; } diff --git a/tests/qemuxmlconfdata/controller-virtio-serial-iothread.x86_64= -latest.err b/tests/qemuxmlconfdata/controller-virtio-serial-iothread.x86_6= 4-latest.err new file mode 100644 index 0000000000..ac4d8b2370 --- /dev/null +++ b/tests/qemuxmlconfdata/controller-virtio-serial-iothread.x86_64-latest= .err @@ -0,0 +1 @@ +XML error: 'iothread' attribute only supported for virtio scsi controllers diff --git a/tests/qemuxmlconfdata/controller-virtio-serial-iothread.xml b/= tests/qemuxmlconfdata/controller-virtio-serial-iothread.xml new file mode 100644 index 0000000000..0b523093c7 --- /dev/null +++ b/tests/qemuxmlconfdata/controller-virtio-serial-iothread.xml @@ -0,0 +1,27 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 + 219100 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu-system-x86_64 + + + + +
+ + + + + + diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index 1f0068864a..ce48b91ac2 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -2822,6 +2822,8 @@ mymain(void) DO_TEST_CAPS_LATEST("virtio-options-rng-packed"); DO_TEST_CAPS_LATEST("virtio-options-video-packed"); + DO_TEST_CAPS_LATEST_PARSE_ERROR("controller-virtio-serial-iothread"); + DO_TEST_CAPS_LATEST("fd-memory-numa-topology"); DO_TEST_CAPS_LATEST("fd-memory-numa-topology2"); DO_TEST_CAPS_LATEST("fd-memory-numa-topology3"); --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 17395508483102.8999849022460467; Fri, 14 Feb 2025 08:34:08 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 31E231B59; Fri, 14 Feb 2025 11:34:07 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 996471C57; Fri, 14 Feb 2025 11:30:42 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 849CC1B21; Fri, 14 Feb 2025 11:30:34 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id DE3F01B7A for ; Fri, 14 Feb 2025 11:30:10 -0500 (EST) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-642-AkosAJ-7McGSzJXb32VU4Q-1; Fri, 14 Feb 2025 11:30:08 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D94071800998 for ; Fri, 14 Feb 2025 16:30:06 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 832C61955DCE; Fri, 14 Feb 2025 16:30:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE,TVD_SPACE_RATIO autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550610; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HpHrabISeZdVCrjhbQYY/JOrdfrr1bySi8DqSVBD5lo=; b=d+MuAJ+OCU/yzjr6KI20MAHMKOvIyM2+86QZEkX2m0lGcZKIfQO6+8KQFb8Z/zUL4EKyQN ekVZWHk1Dz8YgxK6ZonO8JmjinRj5+fPqEJiDR68gFE5G0+qyjrPPpIUBoP9tg4BbodZSW ZnUhAwPXDsL7K9x3mgXxcdKoXXFeM+4= X-MC-Unique: AkosAJ-7McGSzJXb32VU4Q-1 X-Mimecast-MFC-AGG-ID: AkosAJ-7McGSzJXb32VU4Q_1739550607 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 09/13] qemucapabilitiestest: Update 'caps_10.0.0_x86_64' to XXXXXX Date: Fri, 14 Feb 2025 17:29:43 +0100 Message-ID: <1f6c063b0a0335e288309f1b05b9510acfea895f.1739550300.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: zlIo_0aBBSLsTE4GZ51_X_LGavPvWKvyfIwf_6E36M8_1739550607 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 5XQH4OZD2ZWEDVTHWDTLQHMS7MEY5C5S X-Message-ID-Hash: 5XQH4OZD2ZWEDVTHWDTLQHMS7MEY5C5S X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550850672019100 Content-Type: text/plain; charset="utf-8" Notable changes: - 'virtio-scsi' supports 'iothread-vq-mapping' - 'nbd-server-start' command supports 'handshake-max-seconds' argument Reviewed-by: J=C3=A1n Tomko --- .../qemucapabilitiesdata/caps_10.0.0_x86_64.replies | 12 +++++++++++- tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.replies b/tests/= qemucapabilitiesdata/caps_10.0.0_x86_64.replies index a08546ae46..5a59e08ff1 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.replies @@ -20,7 +20,7 @@ "minor": 2, "major": 9 }, - "package": "v9.2.0-1636-gffaf7f0376" + "package": "v9.2.0-1748-g9dac9d741e" }, "id": "libvirt-2" } @@ -4229,6 +4229,11 @@ "name": "addr", "type": "362" }, + { + "name": "handshake-max-seconds", + "default": null, + "type": "int" + }, { "name": "tls-creds", "default": null, @@ -28025,6 +28030,11 @@ "description": "on/off", "type": "bool" }, + { + "name": "iothread-vq-mapping", + "description": "IOThread virtqueue mapping list [{\"iothread\":\"\", \"vqs\":[1,2,3,...]},...]", + "type": "IOThreadVirtQueueMappingList" + }, { "default-value": 4294967295, "name": "num_queues", diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml b/tests/qemu= capabilitiesdata/caps_10.0.0_x86_64.xml index b1cf477bdc..22bb605f3f 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml @@ -214,7 +214,7 @@ 9002050 43100285 - v9.2.0-1636-gffaf7f0376 + v9.2.0-1748-g9dac9d741e x86_64 --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739550919278684.0995627411845; Fri, 14 Feb 2025 08:35:19 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 92E041C79; Fri, 14 Feb 2025 11:35:18 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 555FD1C80; Fri, 14 Feb 2025 11:30:51 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 8BD961C45; Fri, 14 Feb 2025 11:30:45 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 2A44219CD for ; Fri, 14 Feb 2025 11:30:15 -0500 (EST) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-275-AU8RLPWDPnu4Jce-DCKztQ-1; Fri, 14 Feb 2025 11:30:10 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 72694180087B for ; Fri, 14 Feb 2025 16:30:08 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5F86D1955DCE; Fri, 14 Feb 2025 16:30:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550614; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=r9XKs8xVnTvj/2QWB41yOfHKXS511eoOAzGnlYZ2+6w=; b=ODZusqvbfpCpcpuLZrOLYfu5Nsq3l4TWmRQNmbvtXB5nLyT5Z3DfkryLfp9RXkoq53RwDi evmB9CdmCLFsFtIvwDSexPSUtt8B5GVXpYVx3GRiRsAmfbZQ6m2F84je2UHMUFAw7QhLtD OJyVzDZsXEKOr6T/xF1hP8j+7MV5s18= X-MC-Unique: AU8RLPWDPnu4Jce-DCKztQ-1 X-Mimecast-MFC-AGG-ID: AU8RLPWDPnu4Jce-DCKztQ_1739550609 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 10/13] qemu: capabilities: Introduce QEMU_CAPS_VIRTIO_SCSI_IOTHREAD_MAPPING Date: Fri, 14 Feb 2025 17:29:44 +0100 Message-ID: <70826549b44380cf4a365fa95465ac9e54620089.1739550300.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 8BwjKEwdyfj-I166jtcaEyM0L6A3_nQL0winHruXhww_1739550609 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: AXWFB2R3X5RN4E2Q6P25DRLTNXZWDM6Y X-Message-ID-Hash: AXWFB2R3X5RN4E2Q6P25DRLTNXZWDM6Y X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550930246019000 Content-Type: text/plain; charset="utf-8" The 'virtio-scsi' controller now supports iothread<->virtqueue mapping configuration. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 1 + 3 files changed, 4 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 23b466c36e..19511e2333 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -728,6 +728,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "machine.virt.aia", /* QEMU_CAPS_MACHINE_VIRT_AIA */ "virtio-mem-ccw", /* QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW */ "blockdev-set-active", /* QEMU_CAPS_BLOCKDEV_SET_ACTIVE */ + "virtio-scsi.iothread-mapping", /* QEMU_CAPS_VIRTIO_SCSI_IOT= HREAD_MAPPING */ ); @@ -1478,6 +1479,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCaps= DevicePropsSpaprPCIHostBrid static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioSCSI= [] =3D { { "acpi-index", QEMU_CAPS_ACPI_INDEX, NULL }, + { "iothread-vq-mapping", QEMU_CAPS_VIRTIO_SCSI_IOTHREAD_MAPPING, NULL = }, }; static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVfioPCI[] = =3D { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index ee71331a09..feca9bd185 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -707,6 +707,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ QEMU_CAPS_MACHINE_VIRT_AIA, /* -machine virt,aia=3D(none|aplic|aplic-i= msic), RISC-V only */ QEMU_CAPS_DEVICE_VIRTIO_MEM_CCW, /* -device virtio-mem-ccw */ QEMU_CAPS_BLOCKDEV_SET_ACTIVE, /* blockdev-set-active QMP command supp= orted */ + QEMU_CAPS_VIRTIO_SCSI_IOTHREAD_MAPPING, /* virtio-scsi supports per-vi= rtqueue iothread mapping */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml b/tests/qemu= capabilitiesdata/caps_10.0.0_x86_64.xml index 22bb605f3f..b10de7c6d6 100644 --- a/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml @@ -212,6 +212,7 @@ + 9002050 43100285 v9.2.0-1748-g9dac9d741e --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739550872784840.6612243705937; Fri, 14 Feb 2025 08:34:32 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 351691BDF; Fri, 14 Feb 2025 11:34:32 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id BF9B21C10; Fri, 14 Feb 2025 11:30:44 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id F3BA51BFD; Fri, 14 Feb 2025 11:30:34 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 91CF41BB3 for ; Fri, 14 Feb 2025 11:30:12 -0500 (EST) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-339-s7fwz8MoOluu4eH_zktFqA-1; Fri, 14 Feb 2025 11:30:11 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 3EA1418009AC for ; Fri, 14 Feb 2025 16:30:10 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 00A8F1955DCE; Fri, 14 Feb 2025 16:30:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550612; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ph7fqncD+4LV/0bEcsqmsPNE6BD2zPOh8cq7Ictcsvk=; b=h5RHn5y0lUlZuU2WUGe5PmVJqRhwNeavYlqu0Jna7hpcCd83z7wwPhbek3AqfkcgGRFf0f NFmzYnRsvxzmXXQh71Nb0694dC6YVN9uxWlCsu13Q1Yj8eKLMjiDvJyG1qSilAX0hSuO3o 1NOphBa8ujsQXb6hFbL38C6MFb5GsNY= X-MC-Unique: s7fwz8MoOluu4eH_zktFqA-1 X-Mimecast-MFC-AGG-ID: s7fwz8MoOluu4eH_zktFqA_1739550610 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 11/13] conf: Add support for iothread to queue mapping config for 'virtio-scsi' Date: Fri, 14 Feb 2025 17:29:45 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: ToCXsXqj7tlvmPp9NLYI90NrGA5l16N7Q8sMjgSnqd8_1739550610 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: ELCRQQNRC4IWIABGJM657B4TKPJEXL4U X-Message-ID-Hash: ELCRQQNRC4IWIABGJM657B4TKPJEXL4U X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550874172019000 Content-Type: text/plain; charset="utf-8" Upcoming qemu release will support configuring mapping iothreads to virtio queues for 'virtio-scsi' controllers in order to improve performance. Reuse the infrastructure we have from the same configuration for 'virti-blk' to implement the conf support for this feature. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- docs/formatdomain.rst | 33 +++++++++++++++++++++++++++++++ src/conf/domain_conf.c | 10 +++++++++- src/conf/domain_conf.h | 1 + src/conf/domain_validate.c | 10 +++++++++- src/conf/schemas/domaincommon.rng | 3 +++ src/hypervisor/domain_driver.c | 3 ++- 6 files changed, 57 insertions(+), 3 deletions(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 83aeaa32c2..802c875808 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -4123,6 +4123,39 @@ An optional sub-element ``driver`` can specify the d= river specific options: If a specific IOThread is desired for a specific SCSI ``disk``, then mu= ltiple controllers must be defined each having a specific ``iothread`` value. = The ``iothread`` value must be within the range 1 to the domain iothreads v= alue. +``iothreads`` + Supported for ``virtio-scsi`` controllers using ``address`` types ``pci= `` and + ``ccw``. :since:`since 11.1.0 (QEMU 10.0).` Mutually exclusive with ``i= othread``. + + The optional ``iothreads`` sub-element allows specifying multiple IOThr= eads + via the ``iothread`` sub-element with attribute ``id`` the virtio-scsi + controller will use for I/O operations. Optionally the ``iothread`` ele= ment + can have multiple ``queue`` subelements specifying that given iothread + should be used to handle given queues. + + Note that the ``virtio-scsi`` device has two extra internal queues ``ct= rl`` + and ``event`` with indices ``0`` and ``1`` besides queues configured via + the ``queues`` attribute. They need to be covered by manual mapping if + provided. + + Example:: + + + + + + + + + + + + + + + + + virtio options For virtio controllers, `Virtio-related options`_ can also be set. ( :since:`Since 3.5.0` ) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 1a52cda62d..755f4cb537 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2557,6 +2557,8 @@ void virDomainControllerDefFree(virDomainControllerDe= f *def) if (!def) return; + g_slist_free_full(def->iothreads, (GDestroyNotify) virDomainIothreadMa= ppingDefFree); + virDomainDeviceInfoClear(&def->info); g_free(def->virtio); @@ -8618,6 +8620,9 @@ virDomainControllerDefParseXML(virDomainXMLOption *xm= lopt, &def->iothread) < 0) return NULL; + if (virDomainIothreadMappingDefParse(driver, &def->iothreads) < 0) + return NULL; + if (virDomainVirtioOptionsParseXML(driver, &def->virtio) < 0) return NULL; } @@ -23514,6 +23519,7 @@ virDomainControllerDriverFormat(virBuffer *buf, virDomainControllerDef *def) { g_auto(virBuffer) driverBuf =3D VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) driverChildBuf =3D VIR_BUFFER_INIT_CHILD(buf); if (def->queues) virBufferAsprintf(&driverBuf, " queues=3D'%u'", def->queues); @@ -23532,9 +23538,11 @@ virDomainControllerDriverFormat(virBuffer *buf, if (def->iothread) virBufferAsprintf(&driverBuf, " iothread=3D'%u'", def->iothread); + virDomainIothreadMappingDefFormat(&driverChildBuf, def->iothreads); + virDomainVirtioOptionsFormat(&driverBuf, def->virtio); - virXMLFormatElement(buf, "driver", &driverBuf, NULL); + virXMLFormatElement(buf, "driver", &driverBuf, &driverChildBuf); } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 10dd5497ac..8e75e3e04b 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -764,6 +764,7 @@ struct _virDomainControllerDef { unsigned int max_sectors; virTristateSwitch ioeventfd; unsigned int iothread; /* unused =3D 0, > 0 specific thread # */ + GSList *iothreads; /* List of virDomainIothreadMappingDef */ union { virDomainVirtioSerialOpts vioserial; virDomainPCIControllerOpts pciopts; diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 88e5f37651..967600581a 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -1260,7 +1260,7 @@ virDomainControllerDefValidate(const virDomainControl= lerDef *controller) } } - if (controller->iothread !=3D 0) { + if (controller->iothread !=3D 0 || controller->iothreads) { if (controller->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI || !(controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VI= RTIO_SCSI || controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VI= RTIO_TRANSITIONAL || @@ -1269,6 +1269,14 @@ virDomainControllerDefValidate(const virDomainContro= llerDef *controller) _("iothreads are supported only by 'virtio-scsi= ' controllers")); return -1; } + + /* configuring both and it's s= ub-element + * isn't supported */ + if (controller->iothread && controller->iothreads) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("controller driver 'iothread' attribute can't= be used together with 'iothreads' subelement")); + return -1; + } } return 0; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 755a43e893..a8705b34ee 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -3070,6 +3070,9 @@ + + + diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c index b7499a376f..29ba358477 100644 --- a/src/hypervisor/domain_driver.c +++ b/src/hypervisor/domain_driver.c @@ -585,7 +585,8 @@ virDomainDriverDelIOThreadCheck(virDomainDef *def, } for (i =3D 0; i < def->ncontrollers; i++) { - if (def->controllers[i]->iothread =3D=3D iothread_id) { + if (virDomainIothreadMappingDefHasIothread(def->controllers[i]->io= threads, iothread_id) || + def->controllers[i]->iothread =3D=3D iothread_id) { virReportError(VIR_ERR_INVALID_ARG, _("cannot remove IOThread '%1$u' since it is be= ing used by controller"), iothread_id); --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739550893980135.16147997382723; Fri, 14 Feb 2025 08:34:53 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id D48A01BF0; Fri, 14 Feb 2025 11:34:52 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id DDACD1C4D; Fri, 14 Feb 2025 11:30:46 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 5DF5E1B38; Fri, 14 Feb 2025 11:30:35 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 59B201B1B for ; Fri, 14 Feb 2025 11:30:14 -0500 (EST) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-231-gO4dqm-qMVSLgZkIOUs2eg-1; Fri, 14 Feb 2025 11:30:12 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D12821801A35 for ; Fri, 14 Feb 2025 16:30:11 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id BB04E1955DCE; Fri, 14 Feb 2025 16:30:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550614; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Yc9zHjxi3CVmhN6ZFTsikVyoIk+3bjmAJo7i6ams8f8=; b=aTy/tlBdrKYsNfjDKOVLfINByhB6I1MTwBLvW5TziBRAUXJfxzQD8/CRiuGIUB0hjzhY5a DgCjXH4VJ+Fn7GlkVTi2yBqEbUZXqt5pUVlgWeR7N993HPNHq2nDw3HjOGxnPOfN4s60mD 0TcGDVL+46+iNuq8LFVlRWN9v75hai4= X-MC-Unique: gO4dqm-qMVSLgZkIOUs2eg-1 X-Mimecast-MFC-AGG-ID: gO4dqm-qMVSLgZkIOUs2eg_1739550611 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 12/13] qemu: Implement support for iothread <-> virtqueue mapping for 'virtio-scsi' controllers Date: Fri, 14 Feb 2025 17:29:46 +0100 Message-ID: <241681dcbed8388d8bb36b0ad620f62c78f9d5be.1739550300.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: NlhCHQw63LUKxeRs-PqGMhCGq_Y6uUbjOLtpDDV_YlE_1739550611 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: SMPCRZJOTLQAPGDNBILTBSJZO3FKXIDU X-Message-ID-Hash: SMPCRZJOTLQAPGDNBILTBSJZO3FKXIDU X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550896767019100 Content-Type: text/plain; charset="utf-8" Similarly to 'virtio-blk' users can map multiple iothreads and pin them appropriately for 'virtio-scsi' controllers to ensure the best performance. Implement the validation and command line generation based on the helpers we have for 'virtio-blk'. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_command.c | 6 ++++++ src/qemu/qemu_validate.c | 32 +++++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b76fec27c5..ea98dee912 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2510,6 +2510,7 @@ qemuBuildControllerSCSIDevProps(virDomainControllerDe= f *def, virQEMUCaps *qemuCaps) { g_autoptr(virJSONValue) props =3D NULL; + g_autoptr(virJSONValue) iothreadsMapping =3D NULL; g_autofree char *iothread =3D NULL; const char *driver =3D NULL; @@ -2521,11 +2522,16 @@ qemuBuildControllerSCSIDevProps(virDomainController= Def *def, qemuCaps))) return NULL; + if (def->iothreads && + !(iothreadsMapping =3D qemuBuildIothreadMappingProps(def->ioth= reads))) + return NULL; + if (def->iothread > 0) iothread =3D g_strdup_printf("iothread%u", def->iothread); if (virJSONValueObjectAdd(&props, "S:iothread", iothread, + "A:iothread-vq-mapping", &iothreadsMappi= ng, "s:id", def->info.alias, "p:num_queues", def->queues, "p:cmd_per_lun", def->cmd_per_lun, diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 2185e31a27..617cf69f1e 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -3601,9 +3601,10 @@ qemuValidateDomainDeviceDefControllerIDE(const virDo= mainControllerDef *controlle */ static int qemuValidateCheckSCSIControllerIOThreads(const virDomainControllerDef *con= troller, - const virDomainDef *def) + const virDomainDef *def, + virQEMUCaps *qemuCaps) { - if (!controller->iothread) + if (controller->iothread =3D=3D 0 && !controller->iothreads) return 0; if (controller->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && @@ -3614,8 +3615,22 @@ qemuValidateCheckSCSIControllerIOThreads(const virDo= mainControllerDef *controlle return -1; } - /* Can we find the controller iothread in the iothreadid list? */ - if (!virDomainIOThreadIDFind(def, controller->iothread)) { + if (controller->iothreads) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI_IOTHREAD_MAPPI= NG)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("IOThread mapping for virtio-scsi controllers= is not available with this QEMU binary")); + return -1; + } + + /* The 'virtio-scsi' device has two extra internal queues 'ctrl' a= nd + * 'event' with indices '0' and '1' which need to be covered by ma= pping */ + if (qemuDomainValidateIothreadMapping(def, controller->iothreads, + controller->queues + 2) < 0) + return -1; + } + + if (controller->iothread > 0 && + !virDomainIOThreadIDFind(def, controller->iothread)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("controller iothread '%1$u' not defined in iothre= adid"), controller->iothread); @@ -3628,13 +3643,15 @@ qemuValidateCheckSCSIControllerIOThreads(const virD= omainControllerDef *controlle static int qemuValidateDomainDeviceDefControllerSCSI(const virDomainControllerDef *co= ntroller, - const virDomainDef *def) + const virDomainDef *def, + virQEMUCaps *qemuCaps) { switch ((virDomainControllerModelSCSI) controller->model) { case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL: - if (qemuValidateCheckSCSIControllerIOThreads(controller, def) = < 0) + if (qemuValidateCheckSCSIControllerIOThreads(controller, def, + qemuCaps) < 0) return -1; break; @@ -4308,7 +4325,8 @@ qemuValidateDomainDeviceDefController(const virDomain= ControllerDef *controller, break; case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: - ret =3D qemuValidateDomainDeviceDefControllerSCSI(controller, def); + ret =3D qemuValidateDomainDeviceDefControllerSCSI(controller, def, + qemuCaps); break; case VIR_DOMAIN_CONTROLLER_TYPE_PCI: --=20 2.48.1 From nobody Tue Dec 16 03:21:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739550947002585.3074761918695; Fri, 14 Feb 2025 08:35:47 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 02D6B11AC; Fri, 14 Feb 2025 11:35:45 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 312021C4B; Fri, 14 Feb 2025 11:30:53 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 2DF301B20; Fri, 14 Feb 2025 11:30:46 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 101D31969 for ; Fri, 14 Feb 2025 11:30:16 -0500 (EST) Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-164-5_r0-laVPTWwn2ElsHvlWQ-1; Fri, 14 Feb 2025 11:30:14 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6AA3618EAB04 for ; Fri, 14 Feb 2025 16:30:13 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.26]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5895A1955DCE; Fri, 14 Feb 2025 16:30:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739550615; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yIIk6bfVsklfTLDI4gaXQgrg0lBSDshX97sxl4WVN4w=; b=LScW9nUBowOUtZildxVWDNnvscKdPIFZGe9HNBwuhIhL0cPrcQqBh+E9YqUR8CBT1H+1rA 8Dzrodn0lCPhrxJh0FkM++UcQwc3iZDYkKSYVi5oxyFKm2ylwQO/J5m5zcY12DCoORbnV4 GSUNYlXVUbbcLY5K6objYRJcXuEB8tU= X-MC-Unique: 5_r0-laVPTWwn2ElsHvlWQ-1 X-Mimecast-MFC-AGG-ID: 5_r0-laVPTWwn2ElsHvlWQ_1739550613 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 13/13] qemuxmlconftest: Add 'iothreads-virtio-scsi-mapping' case Date: Fri, 14 Feb 2025 17:29:47 +0100 Message-ID: <0e2ca25618a39f5c25d5be3080708e2bc1ab9d2f.1739550300.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: SRhSVf_9b4M295l3iH7CF8oNimj0ZZEJPO9zZS3w98A_1739550613 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: HKOPSTB4KX6OXX7VSUIJIFDHSYOH4ZH7 X-Message-ID-Hash: HKOPSTB4KX6OXX7VSUIJIFDHSYOH4ZH7 X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Stefan Hajnoczi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739550949000019100 Content-Type: text/plain; charset="utf-8" Test the XML and commandline for iothread<->virtqueue mapping for 'virtio-scsi' controllers. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- ...ads-virtio-scsi-mapping.x86_64-latest.args | 39 ++++++++++++++ ...eads-virtio-scsi-mapping.x86_64-latest.xml | 54 +++++++++++++++++++ .../iothreads-virtio-scsi-mapping.xml | 46 ++++++++++++++++ tests/qemuxmlconftest.c | 1 + 4 files changed, 140 insertions(+) create mode 100644 tests/qemuxmlconfdata/iothreads-virtio-scsi-mapping.x86= _64-latest.args create mode 100644 tests/qemuxmlconfdata/iothreads-virtio-scsi-mapping.x86= _64-latest.xml create mode 100644 tests/qemuxmlconfdata/iothreads-virtio-scsi-mapping.xml diff --git a/tests/qemuxmlconfdata/iothreads-virtio-scsi-mapping.x86_64-lat= est.args b/tests/qemuxmlconfdata/iothreads-virtio-scsi-mapping.x86_64-lates= t.args new file mode 100644 index 0000000000..d1a6d85336 --- /dev/null +++ b/tests/qemuxmlconfdata/iothreads-virtio-scsi-mapping.x86_64-latest.args @@ -0,0 +1,39 @@ +LC_ALL=3DC \ +PATH=3D/bin \ +HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ +USER=3Dtest \ +LOGNAME=3Dtest \ +XDG_DATA_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=3DQEMUGuest1,debug-threads=3Don \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/va= r/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,usb=3Doff,dump-guest-core=3Doff,memory-backend=3Dpc.ram,acpi= =3Doff \ +-accel tcg \ +-cpu qemu64 \ +-m size=3D219136k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}'= \ +-overcommit mem-lock=3Doff \ +-smp 2,sockets=3D2,cores=3D1,threads=3D1 \ +-object '{"qom-type":"iothread","id":"iothread1"}' \ +-object '{"qom-type":"iothread","id":"iothread2"}' \ +-object '{"qom-type":"iothread","id":"iothread3"}' \ +-object '{"qom-type":"iothread","id":"iothread4"}' \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=3Dcharmonitor,fd=3D1729,server=3Don,wait=3Doff \ +-mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dcontrol \ +-rtc base=3Dutc \ +-no-shutdown \ +-boot strict=3Don \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0= x2"}' \ +-device '{"driver":"virtio-scsi-pci","iothread-vq-mapping":[{"iothread":"i= othread2","vqs":[1,3]},{"iothread":"iothread3","vqs":[0,2]}],"id":"scsi0","= num_queues":2,"bus":"pci.0","addr":"0xb"}' \ +-blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/iothrtest2= .img","node-name":"libvirt-1-storage","read-only":false}' \ +-device '{"driver":"scsi-hd","bus":"scsi0.0","channel":0,"scsi-id":0,"lun"= :3,"device_id":"drive-scsi0-0-0-3","drive":"libvirt-1-storage","id":"scsi0-= 0-0-3","bootindex":1}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ +-msg timestamp=3Don diff --git a/tests/qemuxmlconfdata/iothreads-virtio-scsi-mapping.x86_64-lat= est.xml b/tests/qemuxmlconfdata/iothreads-virtio-scsi-mapping.x86_64-latest= .xml new file mode 100644 index 0000000000..99752ef5e7 --- /dev/null +++ b/tests/qemuxmlconfdata/iothreads-virtio-scsi-mapping.x86_64-latest.xml @@ -0,0 +1,54 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 2 + 4 + + hvm + + + + qemu64 + + + destroy + restart + destroy + + /usr/bin/qemu-system-x86_64 + + + + +
+ + +
+ + +
+ + + + + + + + + + + + + + + +
+ + + +