From nobody Fri Dec 12 15:14:29 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=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1761724806; cv=none; d=zohomail.com; s=zohoarc; b=d/S4GdEl/tLtTmOBCC62UiXWUpl1NB1F/uv5GXhj8lU+Jb1C2PKgTZIbKCGknxEySKydWWiZa3O6ufVVzJcU7IKohAz3FwcOK4Ae6hOtqKq6IuwRzJX8o9YtZAtgDhIZVohDMyTq9Q2Zj9dFeIMGSYuLO+I3sf5KlJ9eUB1C4vo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761724806; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=t8TkzlOdtZaV4mKKt5jGOkFxDvolKIfzMCLQOmr5I7I=; b=VYSy4mRoy34yobnftJC05/6oE+Al5+i2IHKrj4QlEht3kWGB3g0OAXIpCAdsBgEQo+MQnvTrsUOv4LmhkSO7Hvoqgl7CBs+VE2bv5Bsnte/G498110hzXeXCWo1oURo1t+xcdV/2mAe4d0mNS3/ayA6H2jUMBtYLWvWsXQZv/k4= ARC-Authentication-Results: i=1; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1761724806238359.3310662008495; Wed, 29 Oct 2025 01:00:06 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 4574B41922; Wed, 29 Oct 2025 04:00:05 -0400 (EDT) Received: from [172.19.199.29] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 0297D41997; Wed, 29 Oct 2025 03:56:37 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 3C0EE41863; Wed, 29 Oct 2025 03:53:26 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 4BC9B41850 for ; Wed, 29 Oct 2025 03:53:25 -0400 (EDT) Received: from mx-prod-mc-05.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-397-T6RzBW75McW-g1Pkf8_vKg-1; Wed, 29 Oct 2025 03:53:23 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DC4D519560AA for ; Wed, 29 Oct 2025 07:53:22 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 32BD91800452 for ; Wed, 29 Oct 2025 07:53:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1761724405; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=t8TkzlOdtZaV4mKKt5jGOkFxDvolKIfzMCLQOmr5I7I=; b=hzvqzsasC++LkrbyHVFQJGEDnKV8TMgnYE0KDOArwPKIuiZOISlagoE4DC6AvOfGqTzXaS H3H6ehDNBa2Agijse4eQm2Y36hVY4GjbD2h/T5wJ3Swa7AFc4WXH1awwvWQMtI+C81aFHc geouAqVmd8RUjc2lt+PsFm+6XWaPTHM= X-MC-Unique: T6RzBW75McW-g1Pkf8_vKg-1 X-Mimecast-MFC-AGG-ID: T6RzBW75McW-g1Pkf8_vKg_1761724403 To: devel@lists.libvirt.org Subject: [PATCH 5/7] conf: Introduce virtio options for virtio memory models Date: Wed, 29 Oct 2025 08:53:05 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: eR9zYzVbsRGTcU0Jur4FJ7qSjE5RVqaOp0hLD40uUmw_1761724403 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: AYA65AK34XDVAVS7WR6AFBKVDITFIUED X-Message-ID-Hash: AYA65AK34XDVAVS7WR6AFBKVDITFIUED X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1761724807275158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik Both virtio-mem and virtio-pmem memory models are virtio devices and as such support setting various virtio knobs (iommu, ats, packed, page_per_vq) common to other virtio devices. Introduce element as a child to element, just like we do for other virtio devices, where aforementioned knobs live. NB, this is without docs changes, since we do not document which virtio devices support these knobs and each one is already documented. Also, the virtio-options.xml test needed some additional adjustment (apart from adding virtio-mem device) to enable memory hotplug. Signed-off-by: Michal Privoznik Reviewed-by: Jiri Denemark --- src/conf/domain_conf.c | 12 ++++++++++ src/conf/domain_conf.h | 1 + src/conf/domain_validate.c | 5 ++++ src/conf/schemas/domaincommon.rng | 5 ++++ .../virtio-options.x86_64-latest.args | 9 +++++--- tests/qemuxmlconfdata/virtio-options.xml | 23 +++++++++++++++++-- 6 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d430101dce..c09f026a1c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -14413,6 +14413,10 @@ virDomainMemoryDefParseXML(virDomainXMLOption *xml= opt, &def->info, flags) < 0) return NULL; =20 + if (virDomainVirtioOptionsParseXML(virXPathNode("./driver", ctxt), + &def->virtio) < 0) + return NULL; + return g_steal_pointer(&def); } =20 @@ -22073,6 +22077,9 @@ virDomainMemoryDefCheckABIStability(virDomainMemory= Def *src, break; } =20 + if (!virDomainVirtioOptionsCheckABIStability(src->virtio, dst->virtio)) + return false; + return virDomainDeviceInfoCheckABIStability(&src->info, &dst->info); } =20 @@ -26626,6 +26633,7 @@ virDomainMemoryDefFormat(virBuffer *buf, const char *model =3D virDomainMemoryModelTypeToString(def->model); g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); + g_auto(virBuffer) driverAttrBuf =3D VIR_BUFFER_INITIALIZER; =20 virBufferAsprintf(&attrBuf, " model=3D'%s'", model); if (def->access) @@ -26643,6 +26651,10 @@ virDomainMemoryDefFormat(virBuffer *buf, virBufferAsprintf(&childBuf, "%s\n", uuidstr); } =20 + virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio); + + virXMLFormatElement(&childBuf, "driver", &driverAttrBuf, NULL); + virDomainMemorySourceDefFormat(&childBuf, def); =20 virDomainMemoryTargetDefFormat(&childBuf, def, flags); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index a279fdd43c..b265bf224b 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2801,6 +2801,7 @@ struct _virDomainMemoryDef { } target; =20 virDomainDeviceInfo info; + virDomainVirtioOptions *virtio; }; =20 virDomainMemoryDef *virDomainMemoryDefNew(virDomainMemoryModel model); diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index eea9b38b21..17955decc0 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2723,6 +2723,11 @@ virDomainMemoryDefValidate(const virDomainMemoryDef = *mem, if (virDomainMemoryDefCheckConflict(mem, def) < 0) return -1; =20 + if (!virDomainMemoryIsVirtioModel(mem) && + virDomainCheckVirtioOptionsAreAbsent(mem->virtio) < 0) { + return -1; + } + return 0; } =20 diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index ace74fee08..110f6cbc69 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -7502,6 +7502,11 @@ + + + + + diff --git a/tests/qemuxmlconfdata/virtio-options.x86_64-latest.args b/test= s/qemuxmlconfdata/virtio-options.x86_64-latest.args index 03b3dd9691..f2b9ee2afe 100644 --- a/tests/qemuxmlconfdata/virtio-options.x86_64-latest.args +++ b/tests/qemuxmlconfdata/virtio-options.x86_64-latest.args @@ -10,13 +10,14 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUG= uest1/.config \ -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 \ +-machine pc,usb=3Doff,dump-guest-core=3Doff,acpi=3Doff \ -accel tcg \ -cpu qemu64 \ --m size=3D219136k \ --object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}'= \ +-m size=3D2316288k,maxmem=3D1099511627776k \ -overcommit mem-lock=3Doff \ -smp 1,sockets=3D1,cores=3D1,threads=3D1 \ +-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":23718789= 12}' \ +-numa node,nodeid=3D0,cpus=3D0,memdev=3Dram-node0 \ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ -display none \ -no-user-config \ @@ -29,6 +30,8 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGue= st1/.config \ -device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0= x2"}' \ -device '{"driver":"virtio-scsi-pci","iommu_platform":true,"ats":true,"pac= ked":true,"page-per-vq":true,"id":"scsi0","bus":"pci.0","addr":"0x8"}' \ -device '{"driver":"virtio-serial-pci","iommu_platform":true,"ats":true,"p= acked":true,"page-per-vq":true,"id":"virtio-serial0","bus":"pci.0","addr":"= 0x9"}' \ +-object '{"qom-type":"memory-backend-file","id":"memvirtiomem0","mem-path"= :"/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1","reserve":false,"size":21474= 83648,"host-nodes":[1,2,3],"policy":"bind"}' \ +-device '{"driver":"virtio-mem-pci","node":0,"block-size":2097152,"request= ed-size":1073741824,"memdev":"memvirtiomem0","prealloc":true,"memaddr":5637= 144576,"dynamic-memslots":true,"id":"virtiomem0","bus":"pci.0","addr":"0x5"= }' \ -blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/img1","nod= e-name":"libvirt-1-storage","read-only":false}' \ -device '{"driver":"virtio-blk-pci","iommu_platform":true,"ats":true,"pack= ed":true,"page-per-vq":true,"bus":"pci.0","addr":"0xa","drive":"libvirt-1-s= torage","id":"virtio-disk0","bootindex":1}' \ -fsdev local,security_model=3Dpassthrough,id=3Dfsdev-fs0,path=3D/export/fs= 1 \ diff --git a/tests/qemuxmlconfdata/virtio-options.xml b/tests/qemuxmlconfda= ta/virtio-options.xml index 486bc453a1..05eaae35a9 100644 --- a/tests/qemuxmlconfdata/virtio-options.xml +++ b/tests/qemuxmlconfdata/virtio-options.xml @@ -1,8 +1,9 @@ QEMUGuest1 c7a5fdbd-edaf-9455-926a-d65c16db1809 - 219136 - 219136 + 1099511627776 + 2316288 + 2316288 1 hvm @@ -10,6 +11,9 @@ qemu64 + + + destroy @@ -92,5 +96,20 @@
+ + + + 1-3 + 2048 + + + 2097152 + 0 + 2048 + 1048576 +
+ +
+ --=20 2.51.0