From nobody Sun Feb 8 23:03:41 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1552086387253623.8365976171127; Fri, 8 Mar 2019 15:06:27 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1168A30D78B8; Fri, 8 Mar 2019 23:06:25 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8178F4532; Fri, 8 Mar 2019 23:06:24 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 95C3641F3C; Fri, 8 Mar 2019 23:06:22 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x28N6L9O031606 for ; Fri, 8 Mar 2019 18:06:21 -0500 Received: by smtp.corp.redhat.com (Postfix) id CEEE0600CD; Fri, 8 Mar 2019 23:06:21 +0000 (UTC) Received: from mx1.redhat.com (ext-mx08.extmail.prod.ext.phx2.redhat.com [10.5.110.32]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C8535600C1 for ; Fri, 8 Mar 2019 23:06:19 +0000 (UTC) Received: from smtp2.provo.novell.com (smtp2.provo.novell.com [137.65.250.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 40770C058CA8 for ; Fri, 8 Mar 2019 23:06:18 +0000 (UTC) Received: from linux-tbji.provo.novell.com (prv-ext-foundry1int.gns.novell.com [137.65.251.240]) by smtp2.provo.novell.com with ESMTP (NOT encrypted); Fri, 08 Mar 2019 16:06:07 -0700 From: Jim Fehlig To: libvir-list@redhat.com Date: Fri, 8 Mar 2019 16:05:55 -0700 Message-Id: <20190308230559.5219-2-jfehlig@suse.com> In-Reply-To: <20190308230559.5219-1-jfehlig@suse.com> References: <20190308230559.5219-1-jfehlig@suse.com> MIME-Version: 1.0 X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 216 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Fri, 08 Mar 2019 23:06:18 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Fri, 08 Mar 2019 23:06:18 +0000 (UTC) for IP:'137.65.250.81' DOMAIN:'smtp2.provo.novell.com' HELO:'smtp2.provo.novell.com' FROM:'jfehlig@suse.com' RCPT:'' X-RedHat-Spam-Score: -2.301 (RCVD_IN_DNSWL_MED, SPF_PASS) 137.65.250.81 smtp2.provo.novell.com 137.65.250.81 smtp2.provo.novell.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.32 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/4] conf: Add a new 'xenbus' controller type X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Fri, 08 Mar 2019 23:06:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" xenbus is virtual controller (akin to virtio controllers) for Xen paravirtual devices. Although all Xen VMs have a xenbus, it has never been modeled in libvirt, or in Xen native VM config format for that matter. Recently there have been requests to support Xen's max_grant_frames setting in libvirt. max_grant_frames is best modeled as an attribute of xenbus. It describes the maximum IO buffer space (or DMA space) available in xenbus for use by connected paravirtual devices. This patch introduces a new xenbus controller type that includes a maxGrantFrames attribute. Signed-off-by: Jim Fehlig Reviewed-by: Daniel P. Berrang=C3=A9 --- docs/formatdomain.html.in | 6 ++++++ docs/schemas/domaincommon.rng | 11 +++++++++++ src/conf/domain_conf.c | 25 +++++++++++++++++++++++++ src/conf/domain_conf.h | 8 ++++++++ src/qemu/qemu_command.c | 1 + src/qemu/qemu_domain.c | 2 ++ src/qemu/qemu_domain_address.c | 1 + 7 files changed, 54 insertions(+) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index eb00c01d96..35fcdb2f9e 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -4163,6 +4163,7 @@ <driver iothread=3D'4'/> <address type=3D'pci' domain=3D'0x0000' bus=3D'0x00' slot=3D'0x0b' = function=3D'0x0'/> </controller> + <controller type=3D'xenbus' maxGrantFrames=3D'64'/> ... </devices> ... @@ -4218,6 +4219,11 @@
Since 3.10.0 for the vbox driver,= the ide controller has an optional attribute model, which is one of "piix3", "piix4" or "ich6". +
xenbus
+
Since 5.2.0, the xenbus + controller has an optional attribute maxGrantFrames, + which specifies the maximum number of grant frames the controller + makes available for connected devices.
=20

diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 80f9f84f70..0814a8f9c8 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -2335,6 +2335,17 @@ + + + + xenbus + + + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 995f87bcbe..575a73531d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -347,6 +347,7 @@ VIR_ENUM_IMPL(virDomainController, VIR_DOMAIN_CONTROLLE= R_TYPE_LAST, "ccid", "usb", "pci", + "xenbus", ); =20 VIR_ENUM_IMPL(virDomainControllerModelPCI, VIR_DOMAIN_CONTROLLER_MODEL_PCI= _LAST, @@ -2065,6 +2066,9 @@ virDomainControllerDefNew(virDomainControllerType typ= e) def->opts.pciopts.targetIndex =3D -1; def->opts.pciopts.numaNode =3D -1; break; + case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: + def->opts.xenbusopts.maxGrantFrames =3D -1; + break; case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: @@ -10673,6 +10677,20 @@ virDomainControllerDefParseXML(virDomainXMLOptionP= tr xmlopt, def->opts.pciopts.numaNode =3D numaNode; } break; + case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: { + VIR_AUTOFREE(char *) gntframes =3D virXMLPropString(node, "maxGran= tFrames"); + + if (gntframes) { + int r =3D virStrToLong_i(gntframes, NULL, 10, + &def->opts.xenbusopts.maxGrantFrames); + if (r !=3D 0 || def->opts.xenbusopts.maxGrantFrames < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Invalid maxGrantFrames: %s"), gntframes); + goto error; + } + } + break; + } =20 default: break; @@ -24267,6 +24285,13 @@ virDomainControllerDefFormat(virBufferPtr buf, } break; =20 + case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: + if (def->opts.xenbusopts.maxGrantFrames !=3D -1) { + virBufferAsprintf(&attrBuf, " maxGrantFrames=3D'%d'", + def->opts.xenbusopts.maxGrantFrames); + } + break; + default: break; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c2dcc87ba1..ab8eb16e45 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -709,6 +709,7 @@ typedef enum { VIR_DOMAIN_CONTROLLER_TYPE_CCID, VIR_DOMAIN_CONTROLLER_TYPE_USB, VIR_DOMAIN_CONTROLLER_TYPE_PCI, + VIR_DOMAIN_CONTROLLER_TYPE_XENBUS, =20 VIR_DOMAIN_CONTROLLER_TYPE_LAST } virDomainControllerType; @@ -852,6 +853,12 @@ struct _virDomainUSBControllerOpts { int ports; /* -1 =3D=3D undef */ }; =20 +typedef struct _virDomainXenbusControllerOpts virDomainXenbusControllerOpt= s; +typedef virDomainXenbusControllerOpts *virDomainXenbusControllerOptsPtr; +struct _virDomainXenbusControllerOpts { + int maxGrantFrames; /* -1 =3D=3D undef */ +}; + /* Stores the virtual disk controller configuration */ struct _virDomainControllerDef { int type; @@ -866,6 +873,7 @@ struct _virDomainControllerDef { virDomainVirtioSerialOpts vioserial; virDomainPCIControllerOpts pciopts; virDomainUSBControllerOpts usbopts; + virDomainXenbusControllerOpts xenbusopts; } opts; virDomainDeviceInfo info; virDomainVirtioOptionsPtr virtio; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 3a2ec7f26c..9644799d0d 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3146,6 +3146,7 @@ qemuBuildControllerDevStr(const virDomainDef *domainD= ef, =20 case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: + case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported controller type: %s"), diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 44453a5a7a..30b4b72edc 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5851,6 +5851,7 @@ qemuDomainDeviceDefValidateController(const virDomain= ControllerDef *controller, case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_USB: + case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } @@ -6471,6 +6472,7 @@ qemuDomainControllerDefPostParse(virDomainControllerD= efPtr cont, case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: + case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: break; } diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 4740536d82..3eccf40eb5 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -685,6 +685,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDevic= eDefPtr dev, =20 case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: + case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: /* should be 0 */ return pciFlags; --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list