On Sun, Jan 13, 2019 at 06:12:06PM -0500, Cole Robinson wrote:
Add new <disk> model values for virtio transitional devices.
When
combined with bus='virtio':
* "virtio-transitional" maps to qemu "virtio-blk-pci-transitional"
* "virtio-non-transitional" maps to qemu
"virtio-blk-pci-non-transitional"
Signed-off-by: Cole Robinson <crobinso(a)redhat.com>
---
src/qemu/qemu_command.c | 31 ++++++++++++++++++-
src/qemu/qemu_domain_address.c | 2 ++
...virtio-non-transitional.x86_64-latest.args | 7 +++--
.../virtio-transitional.x86_64-latest.args | 4 +--
.../virtio-non-transitional.xml | 10 ++++--
5 files changed, 45 insertions(+), 9 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 822d5f8669..ca6abea227 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -443,6 +443,33 @@ qemuBuildVirtioDevStr(virBufferPtr buf,
return 0;
}
+static int
+qemuBuildVirtioTransitional(virBufferPtr buf,
+ const char *baseName,
+ virDomainDeviceAddressType type,
+ bool transitional,
+ bool nontransitional)
+{
+ if (qemuBuildVirtioDevStr(buf, baseName, type) < 0)
+ return -1;
+
+ if (type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI &&
+ (transitional || nontransitional)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("virtio transitional models are not supported "
+ "for address type=%s"),
+ virDomainDeviceAddressTypeToString(type));
+ return -1;
+ }
+
+ if (transitional) {
+ virBufferAddLit(buf, "-transitional");
+ } else if (nontransitional) {
+ virBufferAddLit(buf, "-non-transitional");
+ }
+ return 0;
So this only works on QEMU >= 4.0.0 - earlier versions will
fail to start.
We can, however, make it work correctly with old QEMU.
A transitional device is 100% identical to the existing device
types, so we can simply not add the "-transitional" suffix for
old QEMU. The only difference is the way libvirt does PCI bus
placement of the transitional device - we'd never use PCIe.
A non-transitional device is identical to the existing device
types, but with disable-legacy=true set.
QEMU guarantees this compatibility of the different devices,
but only for machine types < pc-i440fx-4.0.0 / pc-q35-4.0.0.
So we should none the less make sure we use the modern device
names for any QEMU which genuinely supports them.
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|