From nobody Sun Feb 8 03:27:38 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1548279251231768.8819842569603; Wed, 23 Jan 2019 13:34:11 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 208D37BDC4; Wed, 23 Jan 2019 21:34:08 +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 AEC8260C6E; Wed, 23 Jan 2019 21:34:07 +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 1CAF43F60F; Wed, 23 Jan 2019 21:34:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x0NLXkTu032423 for ; Wed, 23 Jan 2019 16:33:46 -0500 Received: by smtp.corp.redhat.com (Postfix) id 8514067141; Wed, 23 Jan 2019 21:33:46 +0000 (UTC) Received: from worklaptop.redhat.com (ovpn-120-34.rdu2.redhat.com [10.10.120.34]) by smtp.corp.redhat.com (Postfix) with ESMTP id B1527BA8B; Wed, 23 Jan 2019 21:33:38 +0000 (UTC) From: Cole Robinson To: libvirt-list@redhat.com Date: Wed, 23 Jan 2019 16:32:42 -0500 Message-Id: <4cce1b7008b8dd44ae7eb05eecb48cebaa0f41ee.1548278585.git.crobinso@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Cc: Andrea Bolognani Subject: [libvirt] [PATCH v2 14/25] conf: Add X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 23 Jan 2019 21:34:09 +0000 (UTC) Content-Type: text/plain; charset="utf-8" qemu vhost-scsi devices map to XML roughly like: To support vhost-scsi-pci-{non-}traditional in qemu, we need to to extend the SCSI Host hostdev XML to handle model=3D value. This matches the XML model=3D format used for mediated devices. This is just the domain_conf bits and some XML test cases. Use of virtio-X naming here does not match the hostdev protocol=3Dvhost nor does it match the qemu vhost-X device naming, however it's more consistent with all other model=3D names in this area, and also matches the inconsistency of devices which use model=3Dvirtio but map to vhost-vsock on the qemu commandline Reviewed-by: Andrea Bolognani Signed-off-by: Cole Robinson --- docs/formatdomain.html.in | 5 ++- docs/schemas/domaincommon.rng | 9 +++++ src/conf/domain_conf.c | 38 ++++++++++++++++--- src/conf/domain_conf.h | 12 ++++++ src/libvirt_private.syms | 2 + .../virtio-non-transitional.x86_64-3.1.0.args | 3 ++ ...virtio-non-transitional.x86_64-latest.args | 3 ++ .../virtio-non-transitional.xml | 3 ++ .../virtio-transitional.x86_64-3.1.0.args | 3 ++ .../virtio-transitional.x86_64-latest.args | 3 ++ .../qemuxml2argvdata/virtio-transitional.xml | 3 ++ .../virtio-non-transitional.xml | 9 +++++ .../virtio-transitional.xml | 9 +++++ 13 files changed, 96 insertions(+), 6 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 0f66b5a1fc..c4a4639300 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -4680,7 +4680,10 @@
since 2.5.0For SCSI devices, us= er is responsible to make sure the device is not used by host. Th= is type passes all LUNs presented by a single HBA to - the guest. + the guest. Since 5.1.0, the + model attribute can be specified further + with "virtio-transitional", "virtio-non-transitional", or + "virtio" which matches the old behavior.
mdev
For mediated devices (Since 3.2.0) diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 7af6e2532b..2b20a60edd 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -4627,6 +4627,15 @@ scsi_host + + + + virtio + virtio-transitional + virtio-non-transitional + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0a59a4e91f..8db54daeeb 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -714,6 +714,14 @@ VIR_ENUM_IMPL(virDomainHostdevSubsysSCSIHostProtocol, "none", "vhost") =20 +VIR_ENUM_IMPL(virDomainHostdevSubsysSCSIVHostModel, + VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_LAST, + "default", + "virtio", + "virtio-transitional", + "virtio-non-transitional", +); + VIR_ENUM_IMPL(virDomainHostdevCaps, VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST, "storage", "misc", @@ -7692,6 +7700,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node, int ret =3D -1; virDomainHostdevSubsysPCIPtr pcisrc =3D &def->source.subsys.u.pci; virDomainHostdevSubsysSCSIPtr scsisrc =3D &def->source.subsys.u.scsi; + virDomainHostdevSubsysSCSIVHostPtr scsihostsrc =3D &def->source.subsys= .u.scsi_host; virDomainHostdevSubsysMediatedDevPtr mdevsrc =3D &def->source.subsys.u= .mdev; =20 /* @managed can be read from the xml document - it is always an @@ -7774,14 +7783,26 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node, } } =20 - if (def->source.subsys.type !=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV) { + if (def->source.subsys.type !=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV && + def->source.subsys.type !=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_H= OST) { if (model) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("'model' attribute in is only suppo= rted " - "when type=3D'mdev'")); + virReportError(VIR_ERR_XML_ERROR, + _("'model' attribute in is not suppor= ted " + "for type=3D'%s'"), + virDomainHostdevSubsysTypeToString(def->source.= subsys.type)); goto cleanup; } - } else { + } + + if (def->source.subsys.type =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI= _HOST) { + if (model && + ((scsihostsrc->model =3D virDomainHostdevSubsysSCSIVHostModelT= ypeFromString(model)) < 0)) { + virReportError(VIR_ERR_XML_ERROR, + _("unknown hostdev model '%s'"), + model); + goto cleanup; + } + } else if (def->source.subsys.type =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TY= PE_MDEV) { if (!model) { virReportError(VIR_ERR_XML_ERROR, "%s", _("Missing 'model' attribute in mediated device= 's " @@ -27210,6 +27231,7 @@ virDomainHostdevDefFormat(virBufferPtr buf, const char *mode =3D virDomainHostdevModeTypeToString(def->mode); virDomainHostdevSubsysSCSIPtr scsisrc =3D &def->source.subsys.u.scsi; virDomainHostdevSubsysMediatedDevPtr mdevsrc =3D &def->source.subsys.u= .mdev; + virDomainHostdevSubsysSCSIVHostPtr scsihostsrc =3D &def->source.subsys= .u.scsi_host; const char *type; =20 if (!mode) { @@ -27260,6 +27282,12 @@ virDomainHostdevDefFormat(virBufferPtr buf, virTristateBoolTypeToString(scsisrc->rawio)); } =20 + if (def->source.subsys.type =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_= SCSI_HOST && + scsihostsrc->model) { + virBufferAsprintf(buf, " model=3D'%s'", + virDomainHostdevSubsysSCSIVHostModelTypeToSt= ring(scsihostsrc->model)); + } + if (def->source.subsys.type =3D=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_= MDEV) { virBufferAsprintf(buf, " model=3D'%s'", virMediatedDeviceModelTypeToString(mdevsrc->= model)); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 644dde3dd3..4812339163 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -394,11 +394,23 @@ typedef enum { =20 VIR_ENUM_DECL(virDomainHostdevSubsysSCSIHostProtocol) =20 +typedef enum { + VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_DEFAULT, + VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO, + VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_TRANSITIONAL, + VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_NON_TRANSITIONA= L, + + VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_LAST, +} virDomainHostdevSubsysSCSIVHostModelType; + +VIR_ENUM_DECL(virDomainHostdevSubsysSCSIVHostModel) + typedef struct _virDomainHostdevSubsysSCSIVHost virDomainHostdevSubsysSCSI= VHost; typedef virDomainHostdevSubsysSCSIVHost *virDomainHostdevSubsysSCSIVHostPt= r; struct _virDomainHostdevSubsysSCSIVHost { int protocol; /* enum virDomainHostdevSubsysSCSIHostProtocolType */ char *wwpn; + int model; /* enum virDomainHostdevSubsysSCSIVHostModelType */ }; =20 typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys; diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 8d27d507cc..25038b4e92 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -408,6 +408,8 @@ virDomainHostdevInsert; virDomainHostdevModeTypeToString; virDomainHostdevRemove; virDomainHostdevSubsysPCIBackendTypeToString; +virDomainHostdevSubsysSCSIVHostModelTypeFromString; +virDomainHostdevSubsysSCSIVHostModelTypeToString; virDomainHostdevSubsysTypeToString; virDomainHPTResizingTypeToString; virDomainHubTypeFromString; diff --git a/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-3.1.0.ar= gs b/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-3.1.0.args index 827b4070d4..9c38d713b2 100644 --- a/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-3.1.0.args +++ b/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-3.1.0.args @@ -27,12 +27,15 @@ file=3D/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ addr=3D0x1 \ -device pcie-root-port,port=3D0x9,chassis=3D2,id=3Dpci.2,bus=3Dpcie.0,addr= =3D0x1.0x1 \ -device pcie-root-port,port=3D0xa,chassis=3D3,id=3Dpci.3,bus=3Dpcie.0,addr= =3D0x1.0x2 \ +-device pcie-root-port,port=3D0xb,chassis=3D4,id=3Dpci.4,bus=3Dpcie.0,addr= =3D0x1.0x3 \ -drive file=3D/dev/HostVG/QEMUGuest1,format=3Draw,if=3Dnone,id=3Ddrive-vir= tio-disk0 \ -device virtio-blk-pci,disable-legacy=3Don,disable-modern=3Doff,scsi=3Doff= ,bus=3Dpci.2,\ addr=3D0x0,drive=3Ddrive-virtio-disk0,id=3Dvirtio-disk0,bootindex=3D1 \ -netdev user,id=3Dhostnet0 \ -device virtio-net-pci,disable-legacy=3Don,disable-modern=3Doff,netdev=3Dh= ostnet0,\ id=3Dnet0,mac=3D00:11:22:33:44:55,bus=3Dpci.1,addr=3D0x0 \ +-device vhost-scsi-pci,wwpn=3Dnaa.5123456789abcde0,vhostfd=3D3,id=3Dhostde= v0,\ +bus=3Dpci.3,addr=3D0x0 \ -sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,\ resourcecontrol=3Ddeny \ -msg timestamp=3Don diff --git a/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-latest.a= rgs b/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-latest.args index 9a0eb9a1f3..82255909c4 100644 --- a/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-latest.args +++ b/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-latest.args @@ -27,12 +27,15 @@ file=3D/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ addr=3D0x1 \ -device pcie-root-port,port=3D0x9,chassis=3D2,id=3Dpci.2,bus=3Dpcie.0,addr= =3D0x1.0x1 \ -device pcie-root-port,port=3D0xa,chassis=3D3,id=3Dpci.3,bus=3Dpcie.0,addr= =3D0x1.0x2 \ +-device pcie-root-port,port=3D0xb,chassis=3D4,id=3Dpci.4,bus=3Dpcie.0,addr= =3D0x1.0x3 \ -drive file=3D/dev/HostVG/QEMUGuest1,format=3Draw,if=3Dnone,id=3Ddrive-vir= tio-disk0 \ -device virtio-blk-pci-non-transitional,scsi=3Doff,bus=3Dpci.2,addr=3D0x0,\ drive=3Ddrive-virtio-disk0,id=3Dvirtio-disk0,bootindex=3D1 \ -netdev user,id=3Dhostnet0 \ -device virtio-net-pci-non-transitional,netdev=3Dhostnet0,id=3Dnet0,\ mac=3D00:11:22:33:44:55,bus=3Dpci.1,addr=3D0x0 \ +-device vhost-scsi-pci,wwpn=3Dnaa.5123456789abcde0,vhostfd=3D3,id=3Dhostde= v0,\ +bus=3Dpci.3,addr=3D0x0 \ -sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,\ resourcecontrol=3Ddeny \ -msg timestamp=3Don diff --git a/tests/qemuxml2argvdata/virtio-non-transitional.xml b/tests/qem= uxml2argvdata/virtio-non-transitional.xml index a1b35d1c07..32d2bdc638 100644 --- a/tests/qemuxml2argvdata/virtio-non-transitional.xml +++ b/tests/qemuxml2argvdata/virtio-non-transitional.xml @@ -16,6 +16,9 @@ + + + diff --git a/tests/qemuxml2argvdata/virtio-transitional.x86_64-3.1.0.args b= /tests/qemuxml2argvdata/virtio-transitional.x86_64-3.1.0.args index 9b80cd893a..4e991d6187 100644 --- a/tests/qemuxml2argvdata/virtio-transitional.x86_64-3.1.0.args +++ b/tests/qemuxml2argvdata/virtio-transitional.x86_64-3.1.0.args @@ -27,12 +27,15 @@ file=3D/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ addr=3D0x1 \ -device pcie-pci-bridge,id=3Dpci.2,bus=3Dpci.1,addr=3D0x0 \ -device pcie-root-port,port=3D0x9,chassis=3D3,id=3Dpci.3,bus=3Dpcie.0,addr= =3D0x1.0x1 \ +-device pcie-root-port,port=3D0xa,chassis=3D4,id=3Dpci.4,bus=3Dpcie.0,addr= =3D0x1.0x2 \ -drive file=3D/dev/HostVG/QEMUGuest1,format=3Draw,if=3Dnone,id=3Ddrive-vir= tio-disk0 \ -device virtio-blk-pci,scsi=3Doff,bus=3Dpci.2,addr=3D0x2,drive=3Ddrive-vir= tio-disk0,\ id=3Dvirtio-disk0,bootindex=3D1 \ -netdev user,id=3Dhostnet0 \ -device virtio-net-pci,netdev=3Dhostnet0,id=3Dnet0,mac=3D00:11:22:33:44:55= ,bus=3Dpci.2,\ addr=3D0x1 \ +-device vhost-scsi-pci,wwpn=3Dnaa.5123456789abcde0,vhostfd=3D3,id=3Dhostde= v0,\ +bus=3Dpci.3,addr=3D0x0 \ -sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,\ resourcecontrol=3Ddeny \ -msg timestamp=3Don diff --git a/tests/qemuxml2argvdata/virtio-transitional.x86_64-latest.args = b/tests/qemuxml2argvdata/virtio-transitional.x86_64-latest.args index 46e139d492..dab25ba2e8 100644 --- a/tests/qemuxml2argvdata/virtio-transitional.x86_64-latest.args +++ b/tests/qemuxml2argvdata/virtio-transitional.x86_64-latest.args @@ -27,12 +27,15 @@ file=3D/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ addr=3D0x1 \ -device pcie-pci-bridge,id=3Dpci.2,bus=3Dpci.1,addr=3D0x0 \ -device pcie-root-port,port=3D0x9,chassis=3D3,id=3Dpci.3,bus=3Dpcie.0,addr= =3D0x1.0x1 \ +-device pcie-root-port,port=3D0xa,chassis=3D4,id=3Dpci.4,bus=3Dpcie.0,addr= =3D0x1.0x2 \ -drive file=3D/dev/HostVG/QEMUGuest1,format=3Draw,if=3Dnone,id=3Ddrive-vir= tio-disk0 \ -device virtio-blk-pci-transitional,scsi=3Doff,bus=3Dpci.2,addr=3D0x2,\ drive=3Ddrive-virtio-disk0,id=3Dvirtio-disk0,bootindex=3D1 \ -netdev user,id=3Dhostnet0 \ -device virtio-net-pci-transitional,netdev=3Dhostnet0,id=3Dnet0,\ mac=3D00:11:22:33:44:55,bus=3Dpci.2,addr=3D0x1 \ +-device vhost-scsi-pci,wwpn=3Dnaa.5123456789abcde0,vhostfd=3D3,id=3Dhostde= v0,\ +bus=3Dpci.3,addr=3D0x0 \ -sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,\ resourcecontrol=3Ddeny \ -msg timestamp=3Don diff --git a/tests/qemuxml2argvdata/virtio-transitional.xml b/tests/qemuxml= 2argvdata/virtio-transitional.xml index 18f665577a..eddc1ce9f5 100644 --- a/tests/qemuxml2argvdata/virtio-transitional.xml +++ b/tests/qemuxml2argvdata/virtio-transitional.xml @@ -16,6 +16,9 @@ + + + diff --git a/tests/qemuxml2xmloutdata/virtio-non-transitional.xml b/tests/q= emuxml2xmloutdata/virtio-non-transitional.xml index f0dc7c0833..2af5195dfd 100644 --- a/tests/qemuxml2xmloutdata/virtio-non-transitional.xml +++ b/tests/qemuxml2xmloutdata/virtio-non-transitional.xml @@ -40,6 +40,11 @@
+ + + +
+ @@ -47,6 +52,10 @@ + + +
+ diff --git a/tests/qemuxml2xmloutdata/virtio-transitional.xml b/tests/qemux= ml2xmloutdata/virtio-transitional.xml index f9729391a5..ce7b109845 100644 --- a/tests/qemuxml2xmloutdata/virtio-transitional.xml +++ b/tests/qemuxml2xmloutdata/virtio-transitional.xml @@ -39,6 +39,11 @@
+ + + +
+ @@ -46,6 +51,10 @@ + + +
+ --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list