MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]);
Tue, 30 May 2017 12:53:53 +0000 (UTC)
X-ZohoMail: RSF_0 Z_629925259 SPT_0
Content-Type: text/plain; charset="utf-8"
https://bugzilla.redhat.com/show_bug.cgi?id=3D1283251
---
docs/formatdomain.html.in | 13 +++++++++++=
++
docs/schemas/domaincommon.rng | 5 +++++
src/conf/domain_conf.c | 15 +++++++++++=
++++
src/conf/domain_conf.h | 1 +
tests/qemuxml2argvdata/qemuxml2argv-virtio-options.xml | 4 ++++
.../qemuxml2xmloutdata/qemuxml2xmlout-virtio-options.xml | 4 ++++
6 files changed, 42 insertions(+)
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 5c0f3bf..c9c3592 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -5715,6 +5715,19 @@ qemu-kvm -net nic,model=3D? /dev/null
event device passed through to guests. (KVM only)
=20
+
+ The subelement driver
can be used to tune the virtio
+ options of the device:
+ Virtio-specific options can also be
+ set. (Since 3.5.0 )
+
+
+ The compatibility
attribute of the driver
=
element
+ can be used to specify the compatibility of virtio devices. Allowed =
values
+ are legacy
, transitional
and modern<=
/code>.
+ Since 2.2.0 .
+
+
=20
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 3df4fa4..78ff0a2 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3990,6 +3990,11 @@
=20
+
+
+ [
+ ]
+
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 8ef50d7..5dc3e5c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1379,6 +1379,7 @@ void virDomainInputDefFree(virDomainInputDefPtr def)
=20
virDomainDeviceInfoClear(&def->info);
VIR_FREE(def->source.evdev);
+ VIR_FREE(def->virtio);
VIR_FREE(def);
}
=20
@@ -11560,6 +11561,9 @@ virDomainInputDefParseXML(const virDomainDef *dom,
goto error;
}
=20
+ if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0)
+ goto error;
+
cleanup:
VIR_FREE(evdev);
VIR_FREE(type);
@@ -23347,6 +23351,7 @@ virDomainInputDefFormat(virBufferPtr buf,
const char *type =3D virDomainInputTypeToString(def->type);
const char *bus =3D virDomainInputBusTypeToString(def->bus);
virBuffer childbuf =3D VIR_BUFFER_INITIALIZER;
+ virBuffer driverBuf =3D VIR_BUFFER_INITIALIZER;
=20
/* don't format keyboard into migratable XML for backward compatibilit=
y */
if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE &&
@@ -23370,6 +23375,16 @@ virDomainInputDefFormat(virBufferPtr buf,
type, bus);
=20
virBufferAdjustIndent(&childbuf, virBufferGetIndent(buf, false) + 2);
+ virDomainVirtioOptionsFormat(&driverBuf, def->virtio);
+ if (virBufferCheckError(&driverBuf) < 0)
+ return -1;
+
+ if (virBufferUse(&driverBuf)) {
+ virBufferTrim(&driverBuf, " ", -1);
+ virBufferAddLit(&childbuf, " \n");
+ }
virBufferEscapeString(&childbuf, "\n", def->sour=
ce.evdev);
if (virDomainDeviceInfoFormat(&childbuf, &def->info, flags) < 0)
return -1;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 5e38d0f..0038a11 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1289,6 +1289,7 @@ struct _virDomainInputDef {
char *evdev;
} source;
virDomainDeviceInfo info;
+ virDomainVirtioOptionsPtr virtio;
};
=20
typedef enum {
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-options.xml b/tests=
/qemuxml2argvdata/qemuxml2argv-virtio-options.xml
index be702cb..f614e68 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-options.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-options.xml
@@ -66,15 +66,19 @@
+
+
+
+
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-options.xml b/t=
ests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-options.xml
index be702cb..f614e68 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-options.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-options.xml
@@ -66,15 +66,19 @@
+
+
+
+
--=20
2.10.2
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
From nobody Fri May 16 05:56:14 2025
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.zoho.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 1496148837275119.28805689650335;
Tue, 30 May 2017 05:53:57 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com
[10.5.11.13])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id 59880C04B926;
Tue, 30 May 2017 12:53:55 +0000 (UTC)
Received: from colo-mx.corp.redhat.com
(colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 2FA7A18C6F;
Tue, 30 May 2017 12:53:55 +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 D5569180BAF8;
Tue, 30 May 2017 12:53:54 +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 v4UCroiN013421 for ;
Tue, 30 May 2017 08:53:50 -0400
Received: by smtp.corp.redhat.com (Postfix)
id D893A5C30E; Tue, 30 May 2017 12:53:50 +0000 (UTC)
Received: from icr.brq.redhat.com (dhcp129-58.brq.redhat.com [10.34.129.58])
by smtp.corp.redhat.com (Postfix) with ESMTP id 1442D19E97;
Tue, 30 May 2017 12:53:49 +0000 (UTC)
DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 59880C04B926
Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com;
dmarc=none (p=none dis=none) header.from=redhat.com
Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com;
spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 59880C04B926
From: =?UTF-8?q?J=C3=A1n=20Tomko?=
To: libvir-list@redhat.com
Date: Tue, 30 May 2017 14:50:40 +0200
Message-Id:
In-Reply-To:
References:
In-Reply-To:
References:
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11
X-loop: libvir-list@redhat.com
Cc: jasowang@redhat.com
Subject: [libvirt] [PATCH 17/18] qemuxml2argvtest: add virtio-options test
case
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]);
Tue, 30 May 2017 12:53:56 +0000 (UTC)
X-ZohoMail: RSF_0 Z_629925259 SPT_0
Content-Type: text/plain; charset="utf-8"
Add a test case to demonstrate the addition of new command line options
https://bugzilla.redhat.com/show_bug.cgi?id=3D1283251
---
.../qemuxml2argv-virtio-options.args | 47 ++++++++++++++++++=
++++
tests/qemuxml2argvtest.c | 9 +++++
2 files changed, 56 insertions(+)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-virtio-options.args
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-options.args b/test=
s/qemuxml2argvdata/qemuxml2argv-virtio-options.args
new file mode 100644
index 0000000..b8b5910
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-options.args
@@ -0,0 +1,47 @@
+LC_ALL=3DC \
+PATH=3D/bin \
+HOME=3D/home/test \
+USER=3Dtest \
+LOGNAME=3Dtest \
+QEMU_AUDIO_DRV=3Dnone \
+/usr/bin/qemu-system-x86_64 \
+-name QEMUGuest1 \
+-S \
+-M pc \
+-m 214 \
+-smp 1,sockets=3D1,cores=3D1,threads=3D1 \
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+-nographic \
+-nodefaults \
+-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \
+-no-acpi \
+-boot c \
+-device virtio-scsi-pci,id=3Dscsi0,bus=3Dpci.0,addr=3D0x8 \
+-device virtio-serial-pci,id=3Dvirtio-serial0,bus=3Dpci.0,addr=3D0x9 \
+-usb \
+-drive file=3D/var/lib/libvirt/images/img1,format=3Draw,if=3Dnone,\
+id=3Ddrive-virtio-disk0 \
+-device virtio-blk-pci,bus=3Dpci.0,addr=3D0xa,drive=3Ddrive-virtio-disk0,\
+id=3Dvirtio-disk0 \
+-drive file=3D/var/lib/libvirt/images/img2,format=3Draw,if=3Dnone,\
+id=3Ddrive-virtio-disk1 \
+-device virtio-blk-pci,bus=3Dpci.0,addr=3D0xb,drive=3Ddrive-virtio-disk1,\
+id=3Dvirtio-disk1 \
+-fsdev local,security_model=3Dpassthrough,id=3Dfsdev-fs0,path=3D/export/fs=
1 \
+-device virtio-9p-pci,id=3Dfs0,fsdev=3Dfsdev-fs0,mount_tag=3Dfs1,bus=3Dpci=
.0,addr=3D0x3 \
+-fsdev local,security_model=3Dmapped,writeout=3Dimmediate,id=3Dfsdev-fs1,\
+path=3D/export/fs2 \
+-device virtio-9p-pci,id=3Dfs1,fsdev=3Dfsdev-fs1,mount_tag=3Dfs2,bus=3Dpci=
.0,addr=3D0x4 \
+-device virtio-net-pci,vlan=3D0,id=3Dnet0,mac=3D52:54:56:58:5a:5c,bus=3Dpc=
i.0,addr=3D0x6 \
+-net user,vlan=3D0,name=3Dhostnet0 \
+-device virtio-net-pci,vlan=3D1,id=3Dnet1,mac=3D52:54:56:5a:5c:5e,bus=3Dpc=
i.0,addr=3D0x7 \
+-net user,vlan=3D1,name=3Dhostnet1 \
+-device virtio-mouse-pci,id=3Dinput0,bus=3Dpci.0,addr=3D0xe \
+-device virtio-keyboard-pci,id=3Dinput1,bus=3Dpci.0,addr=3D0x10 \
+-device virtio-tablet-pci,id=3Dinput2,bus=3Dpci.0,addr=3D0x11 \
+-device virtio-input-host-pci,id=3Dinput3,evdev=3D/dev/input/event1234,bus=
=3Dpci.0,\
+addr=3D0x12 \
+-device virtio-gpu-pci,id=3Dvideo0,virgl=3Don,bus=3Dpci.0,addr=3D0x2 \
+-device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0xc \
+-object rng-random,id=3Dobjrng0,filename=3D/dev/random \
+-device virtio-rng-pci,rng=3Dobjrng0,id=3Drng0,bus=3Dpci.0,addr=3D0xd
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 508d7d9..650e949 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -2545,6 +2545,15 @@ mymain(void)
QEMU_CAPS_DEVICE_INTEL_IOMMU);
=20
DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
+ DO_TEST("virtio-options", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_KEYB=
OARD,
+ QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET,
+ QEMU_CAPS_VIRTIO_INPUT_HOST,
+ QEMU_CAPS_FSDEV, QEMU_CAPS_FSDEV_WRITEOUT,
+ QEMU_CAPS_DEVICE_VIRTIO_GPU,
+ QEMU_CAPS_VIRTIO_GPU_VIRGL,
+ QEMU_CAPS_DEVICE_VIRTIO_RNG,
+ QEMU_CAPS_OBJECT_RNG_RANDOM,
+ QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
=20
DO_TEST("fd-memory-numa-topology", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJEC=
T_MEMORY_FILE,
QEMU_CAPS_KVM);
--=20
2.10.2
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
From nobody Fri May 16 05:56:14 2025
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.zoho.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 1496148841711391.61745390940587;
Tue, 30 May 2017 05:54:01 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com
[10.5.11.15])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id C392EC04B92A;
Tue, 30 May 2017 12:53:58 +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 A06DB18401;
Tue, 30 May 2017 12:53:58 +0000 (UTC)
Received: from lists01.pubmisc.prod.ext.phx2.redhat.com
(lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33])
by colo-mx.corp.redhat.com (Postfix) with ESMTP id A46944A492;
Tue, 30 May 2017 12:53:56 +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 v4UCrt13013446 for ;
Tue, 30 May 2017 08:53:55 -0400
Received: by smtp.corp.redhat.com (Postfix)
id 12CFE19EE6; Tue, 30 May 2017 12:53:55 +0000 (UTC)
Received: from icr.brq.redhat.com (dhcp129-58.brq.redhat.com [10.34.129.58])
by smtp.corp.redhat.com (Postfix) with ESMTP id C6A8E5B81B;
Tue, 30 May 2017 12:53:51 +0000 (UTC)
DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C392EC04B92A
Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com;
dmarc=none (p=none dis=none) header.from=redhat.com
Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com;
spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com C392EC04B92A
From: =?UTF-8?q?J=C3=A1n=20Tomko?=
To: libvir-list@redhat.com
Date: Tue, 30 May 2017 14:50:41 +0200
Message-Id:
<12242491f3ff4628c1e928ca9852d7c016f483e6.1496148357.git.jtomko@redhat.com>
In-Reply-To:
References:
In-Reply-To:
References:
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11
X-loop: libvir-list@redhat.com
Cc: jasowang@redhat.com
Subject: [libvirt] [PATCH 18/18] qemu: format virtio-related options on the
command line
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]);
Tue, 30 May 2017 12:53:59 +0000 (UTC)
X-ZohoMail: RSF_0 Z_629925259 SPT_0
Content-Type: text/plain; charset="utf-8"
Format iommu_platform=3D and ats=3D for virtio devices.
https://bugzilla.redhat.com/show_bug.cgi?id=3D1283251
---
src/qemu/qemu_capabilities.c | 12 ++++-
src/qemu/qemu_capabilities.h | 2 +
src/qemu/qemu_command.c | 58 ++++++++++++++++++=
++++
tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 2 +
.../qemuxml2argv-virtio-options.args | 44 +++++++++-------
tests/qemuxml2argvtest.c | 4 +-
6 files changed, 102 insertions(+), 20 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index ae466d7..296a0c4 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -374,6 +374,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
"intel-iommu.eim",
=20
"intel-iommu.device-iotlb", /* 260 */
+ "virtio.iommu_platform",
+ "virtio.ats",
);
=20
=20
@@ -1853,7 +1855,7 @@ struct virQEMUCapsPropTypeObjects {
const char **objects;
};
=20
-static const char *virQEMUCapsVirtioPCIDisableLegacyObjects[] =3D {
+static const char *virQEMUCapsVirtioPCIObjects[] =3D {
"virtio-balloon-pci",
"virtio-blk-pci",
"virtio-scsi-pci",
@@ -1872,7 +1874,13 @@ static const char *virQEMUCapsVirtioPCIDisableLegacy=
Objects[] =3D {
static struct virQEMUCapsPropTypeObjects virQEMUCapsPropObjects[] =3D {
{ "disable-legacy",
QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
- virQEMUCapsVirtioPCIDisableLegacyObjects }
+ virQEMUCapsVirtioPCIObjects },
+ { "iommu_platform",
+ QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
+ virQEMUCapsVirtioPCIObjects },
+ { "ats",
+ QEMU_CAPS_VIRTIO_PCI_ATS,
+ virQEMUCapsVirtioPCIObjects },
};
=20
=20
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 275bbcf..e57cae9 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -413,6 +413,8 @@ typedef enum {
=20
/* 260 */
QEMU_CAPS_INTEL_IOMMU_DEVICE_IOTLB, /* intel-iommu.device-iotlb */
+ QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM, /* virtio-*-pci.iommu_platform */
+ QEMU_CAPS_VIRTIO_PCI_ATS, /* virtio-*-pci.ats */
=20
QEMU_CAPS_LAST /* this must always be the last item */
} virQEMUCapsFlags;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 1f54ba0..59da13f 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -389,6 +389,38 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
}
=20
static int
+qemuBuildVirtioOptionsStr(virBufferPtr buf,
+ virDomainVirtioOptionsPtr virtio,
+ virQEMUCapsPtr qemuCaps)
+{
+ if (!virtio)
+ return 0;
+
+ if (virtio->iommu_platform !=3D VIR_TRISTATE_SWITCH_ABSENT) {
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM)=
) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("the iommu_platform setting is not supported "
+ "with this QEMU binary"));
+ return -1;
+ }
+ virBufferAsprintf(buf, ",iommu_platform=3D%s",
+ virTristateSwitchTypeToString(virtio->iommu_plat=
form));
+ }
+ if (virtio->ats !=3D VIR_TRISTATE_SWITCH_ABSENT) {
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_ATS)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("the ats setting is not supported with this "
+ "QEMU binary"));
+ return -1;
+ }
+ virBufferAsprintf(buf, ",ats=3D%s",
+ virTristateSwitchTypeToString(virtio->ats));
+ }
+
+ return 0;
+}
+
+static int
qemuBuildRomStr(virBufferPtr buf,
virDomainDeviceInfoPtr info)
{
@@ -2167,6 +2199,10 @@ qemuBuildDriveDevStr(const virDomainDef *def,
(disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_=
LUN)
? "on" : "off");
}
+
+ if (qemuBuildVirtioOptionsStr(&opt, disk->virtio, qemuCaps) < 0)
+ goto error;
+
if (qemuBuildDeviceAddressStr(&opt, def, &disk->info, qemuCaps) < =
0)
goto error;
break;
@@ -2490,6 +2526,8 @@ qemuBuildFSDevStr(const virDomainDef *def,
QEMU_FSDEV_HOST_PREFIX, fs->info.alias);
virBufferAsprintf(&opt, ",mount_tag=3D%s", fs->dst);
=20
+ qemuBuildVirtioOptionsStr(&opt, fs->virtio, qemuCaps);
+
if (qemuBuildDeviceAddressStr(&opt, def, &fs->info, qemuCaps) < 0)
goto error;
=20
@@ -2734,6 +2772,8 @@ qemuBuildControllerDevStr(const virDomainDef *domainD=
ef,
def->iothread);
}
}
+ if (qemuBuildVirtioOptionsStr(&buf, def->virtio, qemuCaps) < 0)
+ goto error;
break;
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC:
virBufferAddLit(&buf, "lsi");
@@ -2779,6 +2819,8 @@ qemuBuildControllerDevStr(const virDomainDef *domainD=
ef,
virBufferAsprintf(&buf, ",vectors=3D%d",
def->opts.vioserial.vectors);
}
+ if (qemuBuildVirtioOptionsStr(&buf, def->virtio, qemuCaps) < 0)
+ goto error;
break;
=20
case VIR_DOMAIN_CONTROLLER_TYPE_CCID:
@@ -3773,12 +3815,16 @@ qemuBuildNicDevStr(virDomainDefPtr def,
virBufferAsprintf(&buf, ",id=3D%s", net->info.alias);
virBufferAsprintf(&buf, ",mac=3D%s",
virMacAddrFormat(&net->mac, macaddr));
+
if (qemuBuildDeviceAddressStr(&buf, def, &net->info, qemuCaps) < 0)
goto error;
if (qemuBuildRomStr(&buf, &net->info) < 0)
goto error;
if (bootindex && virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX))
virBufferAsprintf(&buf, ",bootindex=3D%u", bootindex);
+ if (usingVirtio &&
+ qemuBuildVirtioOptionsStr(&buf, net->virtio, qemuCaps) < 0)
+ goto error;
=20
if (virBufferCheckError(&buf) < 0)
goto error;
@@ -4053,6 +4099,9 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd,
virTristateSwitchTypeToString(def->memballoon->a=
utodeflate));
}
=20
+ if (qemuBuildVirtioOptionsStr(&buf, def->memballoon->virtio, qemuCaps)=
< 0)
+ goto error;
+
virCommandAddArg(cmd, "-device");
virCommandAddArgBuffer(cmd, &buf);
return 0;
@@ -4183,6 +4232,9 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def,
if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0)
goto error;
=20
+ if (qemuBuildVirtioOptionsStr(&buf, dev->virtio, qemuCaps) < 0)
+ goto error;
+
if (virBufferCheckError(&buf) < 0)
goto error;
=20
@@ -4495,6 +4547,9 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,
if (qemuBuildDeviceAddressStr(&buf, def, &video->info, qemuCaps) < 0)
goto error;
=20
+ if (qemuBuildVirtioOptionsStr(&buf, video->virtio, qemuCaps) < 0)
+ goto error;
+
if (virBufferCheckError(&buf) < 0)
goto error;
=20
@@ -5863,6 +5918,9 @@ qemuBuildRNGDevStr(const virDomainDef *def,
virBufferAddLit(&buf, ",period=3D1000");
}
=20
+ if (qemuBuildVirtioOptionsStr(&buf, dev->virtio, qemuCaps) < 0)
+ goto error;
+
if (qemuBuildDeviceAddressStr(&buf, def, &dev->info, qemuCaps) < 0)
goto error;
if (virBufferCheckError(&buf) < 0)
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemuc=
apabilitiesdata/caps_2.9.0.x86_64.xml
index d51ee46..58dd9f6 100644
--- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
@@ -216,6 +216,8 @@
+
+
2009000
0
(v2.9.0)
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-options.args b/test=
s/qemuxml2argvdata/qemuxml2argv-virtio-options.args
index b8b5910..677366d 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-options.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-options.args
@@ -16,32 +16,42 @@ QEMU_AUDIO_DRV=3Dnone \
-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \
-no-acpi \
-boot c \
--device virtio-scsi-pci,id=3Dscsi0,bus=3Dpci.0,addr=3D0x8 \
--device virtio-serial-pci,id=3Dvirtio-serial0,bus=3Dpci.0,addr=3D0x9 \
+-device virtio-scsi-pci,iommu_platform=3Don,ats=3Don,id=3Dscsi0,bus=3Dpci.=
0,addr=3D0x8 \
+-device virtio-serial-pci,id=3Dvirtio-serial0,iommu_platform=3Don,ats=3Don=
,bus=3Dpci.0,\
+addr=3D0x9 \
-usb \
-drive file=3D/var/lib/libvirt/images/img1,format=3Draw,if=3Dnone,\
id=3Ddrive-virtio-disk0 \
--device virtio-blk-pci,bus=3Dpci.0,addr=3D0xa,drive=3Ddrive-virtio-disk0,\
-id=3Dvirtio-disk0 \
+-device virtio-blk-pci,iommu_platform=3Don,ats=3Don,bus=3Dpci.0,addr=3D0xa=
,\
+drive=3Ddrive-virtio-disk0,id=3Dvirtio-disk0 \
-drive file=3D/var/lib/libvirt/images/img2,format=3Draw,if=3Dnone,\
id=3Ddrive-virtio-disk1 \
--device virtio-blk-pci,bus=3Dpci.0,addr=3D0xb,drive=3Ddrive-virtio-disk1,\
-id=3Dvirtio-disk1 \
+-device virtio-blk-pci,iommu_platform=3Doff,ats=3Doff,bus=3Dpci.0,addr=3D0=
xb,\
+drive=3Ddrive-virtio-disk1,id=3Dvirtio-disk1 \
-fsdev local,security_model=3Dpassthrough,id=3Dfsdev-fs0,path=3D/export/fs=
1 \
--device virtio-9p-pci,id=3Dfs0,fsdev=3Dfsdev-fs0,mount_tag=3Dfs1,bus=3Dpci=
.0,addr=3D0x3 \
+-device virtio-9p-pci,id=3Dfs0,fsdev=3Dfsdev-fs0,mount_tag=3Dfs1,iommu_pla=
tform=3Don,\
+ats=3Don,bus=3Dpci.0,addr=3D0x3 \
-fsdev local,security_model=3Dmapped,writeout=3Dimmediate,id=3Dfsdev-fs1,\
path=3D/export/fs2 \
--device virtio-9p-pci,id=3Dfs1,fsdev=3Dfsdev-fs1,mount_tag=3Dfs2,bus=3Dpci=
.0,addr=3D0x4 \
--device virtio-net-pci,vlan=3D0,id=3Dnet0,mac=3D52:54:56:58:5a:5c,bus=3Dpc=
i.0,addr=3D0x6 \
+-device virtio-9p-pci,id=3Dfs1,fsdev=3Dfsdev-fs1,mount_tag=3Dfs2,iommu_pla=
tform=3Don,\
+ats=3Don,bus=3Dpci.0,addr=3D0x4 \
+-device virtio-net-pci,vlan=3D0,id=3Dnet0,mac=3D52:54:56:58:5a:5c,bus=3Dpc=
i.0,addr=3D0x6,\
+iommu_platform=3Don,ats=3Don \
-net user,vlan=3D0,name=3Dhostnet0 \
--device virtio-net-pci,vlan=3D1,id=3Dnet1,mac=3D52:54:56:5a:5c:5e,bus=3Dpc=
i.0,addr=3D0x7 \
+-device virtio-net-pci,vlan=3D1,id=3Dnet1,mac=3D52:54:56:5a:5c:5e,bus=3Dpc=
i.0,addr=3D0x7,\
+iommu_platform=3Doff,ats=3Doff \
-net user,vlan=3D1,name=3Dhostnet1 \
--device virtio-mouse-pci,id=3Dinput0,bus=3Dpci.0,addr=3D0xe \
--device virtio-keyboard-pci,id=3Dinput1,bus=3Dpci.0,addr=3D0x10 \
--device virtio-tablet-pci,id=3Dinput2,bus=3Dpci.0,addr=3D0x11 \
+-device virtio-mouse-pci,id=3Dinput0,bus=3Dpci.0,addr=3D0xe,iommu_platform=
=3Don,ats=3Don \
+-device virtio-keyboard-pci,id=3Dinput1,bus=3Dpci.0,addr=3D0x10,iommu_plat=
form=3Don,\
+ats=3Don \
+-device virtio-tablet-pci,id=3Dinput2,bus=3Dpci.0,addr=3D0x11,iommu_platfo=
rm=3Don,\
+ats=3Don \
-device virtio-input-host-pci,id=3Dinput3,evdev=3D/dev/input/event1234,bus=
=3Dpci.0,\
-addr=3D0x12 \
--device virtio-gpu-pci,id=3Dvideo0,virgl=3Don,bus=3Dpci.0,addr=3D0x2 \
--device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0xc \
+addr=3D0x12,iommu_platform=3Don,ats=3Don \
+-device virtio-gpu-pci,id=3Dvideo0,virgl=3Don,bus=3Dpci.0,addr=3D0x2,iommu=
_platform=3Don,\
+ats=3Don \
+-device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0xc,iommu_plat=
form=3Don,\
+ats=3Don \
-object rng-random,id=3Dobjrng0,filename=3D/dev/random \
--device virtio-rng-pci,rng=3Dobjrng0,id=3Drng0,bus=3Dpci.0,addr=3D0xd
+-device virtio-rng-pci,rng=3Dobjrng0,id=3Drng0,iommu_platform=3Don,ats=3Do=
n,bus=3Dpci.0,\
+addr=3D0xd
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 650e949..a674bde 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -2553,7 +2553,9 @@ mymain(void)
QEMU_CAPS_VIRTIO_GPU_VIRGL,
QEMU_CAPS_DEVICE_VIRTIO_RNG,
QEMU_CAPS_OBJECT_RNG_RANDOM,
- QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
+ QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
+ QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
+ QEMU_CAPS_VIRTIO_PCI_ATS);
=20
DO_TEST("fd-memory-numa-topology", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJEC=
T_MEMORY_FILE,
QEMU_CAPS_KVM);
--=20
2.10.2
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list